JNA读取dll动态库导致jvm崩溃

最近准备用Java调用读卡器进行读卡和刷卡,厂商没有java版的SDK,只提供了c++的dll动态库,下面是我调用动态库的一些方法,如果有大神有更好的方法,欢迎指导。

第一步:

下载JNA的jar包导入到程序里面(maven可以自行到仓库拿)JNA读取dll动态库导致jvm崩溃

dll接口:

JNA读取dll动态库导致jvm崩溃

java对应的接口:

JNA读取dll动态库导致jvm崩溃

其中loadLibrary是加载dll动态库文件,JT_ReaderVersion是重写的接口,对应的C++里面的OnGetVersion方法。

当main方法调取接口的时候会导致jvm崩溃:

JNA读取dll动态库导致jvm崩溃

JNA读取dll动态库导致jvm崩溃

上面是报错信息,原因是因为向动态库中传值时出问题了,传值的时候需要指定参数的内存大小

JNA读取dll动态库导致jvm崩溃

JNA读取dll动态库导致jvm崩溃

必须指定内存大小Pointer p = new Memory(512*512);

修改了内存大小,就解决问题了。如果你遇到同样的问题,不妨试一试。