gpt4 book ai didi

java - 使用 JNI 构建 C++ Java 包装器

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:49 35 4
gpt4 key购买 nike

我目前正在为 C++ 类编写 JNI 包装器,我不确定到目前为止我所做的是否是最正确的方法。

据我所知,不可能声明一个 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"); }
}

基本上,我的 internalPtr 字段包含指向我的底层 C++ 实例的指针,我使用 static native 方法 createNativeInstance( )

这是做事的正确方法吗?

另一个我可以得到答案的问题是:“我应该如何处理释放?”

我的 Java 技能极其有限,所以即使是更“明显”的解决方案,请不要犹豫。

非常感谢。

最佳答案

这就是我一直实现围绕 C/C++ 对象的 native 类的方式。我认为编写 native 构造函数可能会有点痛苦,所以从未尝试过。

对于取消分配,您需要做类似的事情。编写一个 C/C++ 函数,为您的 C/C++ 对象取消分配内存,然后从 java 析构函数(finalise 方法)中调用它。所以像这样:

private native void destroyNativeInstance( long p_internalPtr );

public void finalize()
{
destroyNativeInstance( this.internalPtr );
}

关于java - 使用 JNI 构建 C++ Java 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6355028/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com