2

我试图通过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.

这段代码有什么问题?或者,也许还有另一种方法可以做我想做的事?

4

2 回答 2

2

好的。正如@Nejat 建议的那样,我设法通过使用短签名“J”替换 Float 来解决我的问题。

所以现在它看起来像 Qt:

QAndroidJniObject res = activity.callObjectMethod("process", "(J)Ljava/lang/String;", (jlong)thisAddress);

爪哇:

public String process(long clientAddr)
于 2015-03-29T08:49:25.180 回答
2

类型的签名jlongJ。另请注意,C++long有 32 位,所以它等价于 a jint,此处无需使用 a jlong。但是您也可以将 a 分配long给 a jlong。它将自动转换。

所以方法调用应该是这样的:

QAndroidJniObject res = activity.callObjectMethod("process", "(J)Ljava/lang/String;", thisAddress);
于 2015-03-29T07:33:02.113 回答