Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;用JNI构造Java包装器 我现在正在为C++类编写JNI包装器,我不确定我目前做的是最正确的方法。_Java_C++_Java Native Interface_Wrapper - Fatal编程技术网

C++;用JNI构造Java包装器 我现在正在为C++类编写JNI包装器,我不确定我目前做的是最正确的方法。

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

据我所知,不可能声明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, 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,可能更容易开始。它看起来是一个优雅的解决方案。非常感谢。