C++;用JNI构造Java包装器 我现在正在为C++类编写JNI包装器,我不确定我目前做的是最正确的方法。
据我所知,不可能声明Java构造函数C++;用JNI构造Java包装器 我现在正在为C++类编写JNI包装器,我不确定我目前做的是最正确的方法。,java,c++,java-native-interface,wrapper,Java,C++,Java Native Interface,Wrapper,据我所知,不可能声明Java构造函数native,因此我最终编写了如下内容: package log; public class Logger { private long internalPtr = 0; private native long createNativeInstance(String application, String module, String function); public Logger(String application, Str
native
,因此我最终编写了如下内容:
package log;
public class Logger
{
private long internalPtr = 0;
private native long createNativeInstance(String application, String module, String function);
public Logger(String application, String module, String function)
{
this.internalPtr = createNativeInstance(application, module, function);
}
public native String getApplication();
static { System.loadLibrary("log_java"); }
}
<>基本上,我的代码>内部ALTPRT字段保存指向我的底层C++实例的指针,并且我用纯代码的java构造函数创建它,使用<代码>静态原生< /COD>方法>代码> CurrAtEnTyVIVE()/<代码> .<
这是正确的做事方式吗
我可以得到答案的另一个问题是:“我应该如何处理交易?”
我的Java技能非常有限,因此请毫不犹豫地提出更“明显”的解决方案
非常感谢。这是我一直以来实现本机类的方式,这些类围绕C/C++对象进行包装。我认为编写本机构造函数可能有点痛苦,所以我从未尝试过 对于去分配,您需要做一件简单的事情。编写一个C/C++函数,为C/C++对象取消分配内存,然后从java析构函数(finalize方法)调用它。比如说:
private native void destroyNativeInstance( long p_internalPtr );
public void finalize()
{
destroyNativeInstance( this.internalPtr );
}
检查JNA,可能更容易开始。它看起来是一个优雅的解决方案。非常感谢。