JNI:使用对象作为参数在C ++中调用Java方法

时间:2013-06-28 10:37:23

标签: java-native-interface

我是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完全合格的班级;传递像String这样的对象,但是当对象不是来自官方javalibraries而是我创建的对象时,我该怎么做呢? 我试过这个,但显然没有用:

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

我得到的所有答案都是找不到方法。那么我需要写什么而不是(Lcls;)?或者这不可能吗?

任何想法都很有用!

1 个答案:

答案 0 :(得分:5)

在已编译的Java类上运行javap -s,并使用它告诉您的本机方法的签名。剪切和粘贴。当你拥有一个永不错误的工具时,不要浪费你的时间试图弄清楚它。