Java native interface JNI:在C++;以对象为参数 我是JNI的新手,有一个java程序,我想从C++中调用方法。 我有一个用Java实现的ObjectA。我在C++中收到的classID如下: jclass cls = env->FindClass("myPackages/ObjectA");

Java native interface JNI:在C++;以对象为参数 我是JNI的新手,有一个java程序,我想从C++中调用方法。 我有一个用Java实现的ObjectA。我在C++中收到的classID如下: jclass cls = env->FindClass("myPackages/ObjectA");,java-native-interface,Java Native Interface,现在我有了Java中给出的funcA方法。funcA接受ObjectA类型的对象作为参数,并返回一个整数。Java中的声明如下所示: public int funcA( ObjectA obj); 现在我想得到C++中函数的方法。问题是,我不知道如何指定方法得到的参数类型。我知道我必须写一个完全合格的班级;要像字符串一样传递对象,但是当对象不是来自正式的JavaLibrary而是我创建的对象时,我该怎么做呢? 我试过这个,但显然不起作用: jmethodID jfuncA = env->

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

public int funcA( ObjectA obj);

现在我想得到C++中函数的方法。问题是,我不知道如何指定方法得到的参数类型。我知道我必须写一个完全合格的班级;要像字符串一样传递对象,但是当对象不是来自正式的JavaLibrary而是我创建的对象时,我该怎么做呢? 我试过这个,但显然不起作用:

jmethodID jfuncA = env->GetMethodID(cls, "funcA", "(Lcls;)I");
我得到的答复是,没有找到该方法。那么我需要写什么来代替(Lcls;)?或者这是不可能的


任何想法都是有用的

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

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

javap-s-p
包含私有方法。@Jakob不,这是我的观点。为什么计算机可以自己做呢?@EJP是的,但是当我开始使用JNI时,它帮助我理解了它是如何工作的。你必须给出完整的类路径…比如Lcom/mypackage/subpack/class。。。看看这个问题。你甚至可以通过获取字段ID来访问java类成员……这可能有助于
javap-s-p
包含私有方法。@Jakob不,这是我的观点。为什么计算机可以自己做呢?@EJP是的,但是当我开始使用JNI时,它帮助我理解了它是如何工作的。你必须给出完整的类路径…比如Lcom/mypackage/subpack/class。。。看看这个问题。你可以通过获取字段ID来访问java类成员。这也可能帮助C++编程语言的工作。code>cls是代码中的一个变量。不能在字符串文本中使用它!为什么不直接编写
myPackages/ObjectA
?那就行了。这根本不是C++编程语言的工作原理。code>cls是代码中的一个变量。不能在字符串文本中使用它!为什么不直接编写
myPackages/ObjectA
?那就行了。