为构造函数创建java本机方法

时间:2011-09-30 22:43:47

标签: java c++ java-native-interface

我正在用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();
}

我会这样做吗?

由于

2 个答案:

答案 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 ++代码中实际调用构造函数。