最近寫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