我正在用Java编写程序,我想为用C ++编写的库创建一个本机接口。但我对如何为构造函数编写本机方法声明感到困惑。
说我有这个C ++类和构造函数:
template <class _Tp,class _Val>
class Arbitrator
{
public:
Arbitrator();
}
我如何编写本机方法声明?
这就是我到目前为止所做的事情: 包hbot.proxy.bwsal.arbitrator;
public class Arbitrator<Tp, Val>
{
public native Arbitrator Arbitrator();
}
我会这样做吗?
由于
答案 0 :(得分:14)
创建本机方法。例如,private native void init()
。从Java中的构造函数中调用它。在它的JNI实现中根据需要访问C ++类。
无论如何,您必须使用JNI生成的方法签名,因此如果您想要这样做,则无法直接将Java类映射到C ++类。
答案 1 :(得分:0)
为了从C ++ JNI代码调用Java类构造函数,您需要在此处使用JNI构造。假设您已经在C ++函数中使用 JNIEnv 传递了对JVM的引用,如下所示:
//功能声明
void
Java_com_hunter_mcmillen_Arbitrator (JNIEnv *env, jobject thiz) {
//引用具有您方法的Java类
jclass itemClazz = env->FindClass("com/hunter/mcmillen/myjava/myclasses/Arbitrator");
//引用java类中的方法
jmethodID constructor = env->GetMethodID(itemClazz, "<init>", "(Ljava/lang/Object;Ljava/lang/Object)V");
}
现在你可以在C ++代码中实际调用构造函数。