2013-06-28 75 views
1

我是新来JNI,并给予一个Java程序,从中我想打电话给使用C++的方法。 我有一个用Java实现的ObjectA。我收到它在C++中的classID:JNI:调用C++中的Java方法与对象作为参数

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

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

public int funcA(ObjectA obj); 

现在我想要获取C++中funcA的methodID。问题是,我不知道如何指定该方法获得的参数类型。我知道我必须写L完全合格的课;传递像String这样的对象,但是如果对象不是来自官方javalibraries,而是我创建的对象,我该如何做到这一点? 我想这一点,但它显然没有奏效:

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

我的一切作为回应是,该法没有被发现。那么我需要写什么来代替(Lcls)?或者这是不可能的?

任何想法都很有用!

+0

这根本不是C++编程语言的工作原理。 'cls'是你的代码中的一个变量。你不能在字符串里使用它!你为什么不直接写'myPackages/ObjectA'呢?然后它会工作。 –

回答

5
您编译的Java类

运行javap -s和使用正是它告诉你的本地方法的签名。剪切和粘贴。当你有一个永不误解的工具时,不要浪费你的时间去为自己弄明白。

+3

'javap -s -p'包含私有方法。 –

+1

http://dev.kanngard.net/Permalinks/ID_20050509144235.html可能有助于太有点 – Jakob

+0

@Jakob不,那是我的观点。为什么当电脑可以自己做? – EJP