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

相关文章
相关标签/搜索