JNA 備註

最近寫JNA調用DLL的代碼比較多。應該這樣說,C的精華在於對指針的靈活運用,而用JNA調用C/C++最痛苦的也在於此。你不知道該用什麼樣的方式去對應C/C++的方法,特別是遇到指針、結構體指針、指針做爲出參、入參或返回值等等。本文主要把最近遇到並解決了一些問題,備註以下:java

一、C++的工程被JNA調用前,要增長extern "C";不然的話方法名字會沒法識別;編碼

二、byte[]做爲入參的時候可直接使用java的byte[],若做爲出參使用ByteByReference;spa

三、指針和引用都使用ByReference,例如int*或int& 都用IntByReference;指針

四、結構體做爲參數傳值時記得增長write方法,例如strXX.write(),用以將值寫入內存;反之則採用read方法;code

五、結構體指針,在C/C++裏是須要強轉的狀況;能夠直接用Pointer(不管是做爲返回值,仍是入參),也就至關於用void*的指針,最後用Pointer的write方法去寫值就能夠;blog

六、能夠經過setProperty方法設置編碼格式和路徑,以下:內存

static{
        System.setProperty("jna.encoding","utf-8");
        System.setProperty("jna.library.path","E://lib");
    }

七、用JNA時,記得釋放資源;你至關於在操做new或malloc;utf-8

相關文章
相關標籤/搜索