1

我是 JNI 的新手,并且有一个 Java 程序,我想从中调用 C++ 中的方法。我有一个用 Java 实现的 ObjectA。我在 C++ 中像这样收到它的 classID:

jclass cls = env->FindClass("myPackages/ObjectA");

现在我有了Java中给出的方法funcA。funcA 接受 ObjectA 类型的 Object 作为参数并返回一个整数。Java 中的声明如下所示:

public int funcA( ObjectA obj);

现在我想在 C++ 中获取 funcA 的 methodID。问题是,我不知道如何指定方法获取的参数类型。我知道我必须写 L fully-qualified-class ;像字符串一样传递对象,但是当对象不是来自官方 javalibraries 而是我创建的对象时,我该怎么做?我试过这个,但它显然没有用:

jmethodID jfuncA = env->GetMethodID(cls, "funcA", "(Lcls;)I");

我得到的回应是,找不到该方法。那么我必须写什么而不是(Lcls;)?或者这是不可能的?

任何想法都是有用的!

4

1 回答 1

5

在您编译的 Java 类上运行javap -s并准确使用它告诉您的内容作为本机方法的签名。剪切和粘贴。当你有一个永远不会出错的工具时,不要浪费你的时间试图自己弄清楚。

于 2013-06-28T10:56:43.463 回答