使用 JNI 将长值传递给 Java
Passing long value to Java with JNI
我正在尝试通过 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 来解决我的问题。
所以现在看起来像那样
Qt:
QAndroidJniObject res = activity.callObjectMethod("process", "(J)Ljava/lang/String;", (jlong)thisAddress);
Java:
public String process(long clientAddr)
我正在尝试通过 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 来解决我的问题。
所以现在看起来像那样 Qt:
QAndroidJniObject res = activity.callObjectMethod("process", "(J)Ljava/lang/String;", (jlong)thisAddress);
Java:
public String process(long clientAddr)