簡體   English   中英

使用JNI構建C ++ Java包裝器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM