JNA 備注
最近寫JNA調用DLL的代碼比較多。應該這樣說,C的精華在于對指針的靈活運用,而用JNA調用C/C++最痛苦的也在于此。你不知道該用什么樣的方式去對應C/C++的方法,特別是遇到指針、結構體指針、指針作為出參、入參或返回值等等。本文主要把最近遇到并解決了一些問題,備注如下:
1、C++的工程被JNA調用前,要增加extern "C";否則的話方法名字會無法識別;
2、byte[]作為入參的時候可直接使用java的byte[],若作為出參使用ByteByReference;
3、指針和引用都使用ByReference,例如int*或int& 都用IntByReference;
4、結構體作為參數傳值時記得增加write方法,例如strXX.write(),用以將值寫入內存;反之則采用read方法;
5、結構體指針,在C/C++里是需要強轉的情況;可以直接用Pointer(不論是作為返回值,還是入參),也就相當于用void*的指針,最后用Pointer的write方法去寫值就可以;
6、可以通過setProperty方法設置編碼格式和路徑,如下:
static{ System.setProperty("jna.encoding","utf-8"); System.setProperty("jna.library.path","E://lib"); }
7、用JNA時,記得釋放資源;你相當于在操作new或malloc;
浙公網安備 33010602011771號