结果:
可以使用jna的std方式加载
public interface StdCallDll extends StdCallLibrary {
String dll_path = "HxgcDeviceApi_J10";
StdCallDll INSTANCE = (StdCallDll) Native.load(dll_path, StdCallDll.class);
int CarderClose();//对应的dll动态库的方法
int GetModuleVer(int piIModule, String poPszModuleVer);
}
网上看很多教程都是调用的经过jni编译后的,我现在情况是这个动态库第三方提供的,没有经过jni编译的,有没有方法可以用java来调用,具体要怎么操作,还有就是dll函数里面int是返回值,CarderClose是函数名,那这个__stdcall是什么啊
我现在用
dll函数:
int __stdcall CarderClose();
java实现:
static {
System.loadLibrary("lib/DeviceApi_J10");
}
public native int CarderClose();
public static void main(String[] args) {
new App().CarderClose();
}
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.test.App.CarderClose()I
at com.keyou.App.CarderClose(Native Method)
at com.keyou.App.main(App.java:12)
`
自己用c++写一个调用第三方动态库的代理dll,然后把代理dll的引出函数写成符合jni规范的函数,然后把代理dll和第三方dll放到jni指定的路径即可,java调用代理dll,然后代理dll再调用第三方动态库。