我正试图通过JNI将对象指针从C++代码传递到java方法,以便稍后在回调中将其转换回指针。
void Client::process()
{
long thisAddress = (long)this;
QAndroidJniObject res = activity.callObjectMethod("process", "(Ljava/lang/Long;)Ljava/lang/String;", (jlong)thisAddress);
}
Java函数原型为public String process(Long clientAddr)
JVM打印给我的是美:Invalid indirect reference 0x5f3d9bc8 in decodeIndirectRef
。
这个代码出了什么问题?或者,也许还有另一种方法可以做我想做的事?
jlong
类型的签名是J
。还要注意,C++long
有32位,因此它等效于jint
,这里不需要使用jlong
。但是您也可以将long
分配给jlong
。它将自动转换。
因此方法调用应该像:
QAndroidJniObject res = activity.callObjectMethod("process", "(J)Ljava/lang/String;", thisAddress);
好的。正如@Nejat所建议的那样,我通过使用短签名"J"将Float替换为Float来解决我的问题。
所以现在看起来是这样问题:
QAndroidJniObject res = activity.callObjectMethod("process", "(J)Ljava/lang/String;", (jlong)thisAddress);
Java:
public String process(long clientAddr)