[英]C++ Java wrapper construction with JNI
我目前正在為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構造函數中創建它。
這是正確的做事方式嗎?
我能得到答案的另一個問題是:“我該如何處理釋放?”
我的Java技能非常有限,所以不要猶豫,甚至建議更“明顯”的解決方案。
非常感謝你。
這就是我總是實現包裝C / C ++對象的本機類的方式。 我認為編寫一個本地構造函數可能有點痛苦,所以從未嘗試過。
對於取消分配,你做一個類似的事情。 編寫一個C / C ++函數,為您的C / C ++對象取消分配內存,然后從java析構函數(finalize方法)中調用它。 所以像這樣:
private native void destroyNativeInstance( long p_internalPtr );
public void finalize()
{
destroyNativeInstance( this.internalPtr );
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.