我使用 JNA 调用 3. 方提供的用 C# 编写的 .dll。这是我使用 dll 的代码:
public class Main{
public interface AirtrackDLL extends Library{
AirtrackDLL INSTANCE =
(AirtrackDLL)Native.loadLibrary("atproc32.dll",AirtrackDLL.class);
static interface TestPing extends Callback{
short invoke(short param);
}
static interface TestDBConnection extends Callback{
short invoke();
}
public short TestPing(TestPing callbackparam);
public short TestPing(short param);
public short TestDBConnection(TestDBConnection callbackparam);
}
public static void main(String[] args) {
AirtrackDLL dll = AirtrackDLL.INSTANCE;
System.out.println("Result ohne callback : " + dll.TestPing((short)3));
short res = dll.TestPing(new AirtrackDLL.TestPing() {
@Override
public short invoke(short param) {
System.out.println(param);
return (short)0;
}
});
System.out.println("Result mit callback : " + res);
short res1 = dll.TestDBConnection(new AirtrackDLL.TestDBConnection() {
@Override
public short invoke() {
// TODO Auto-generated method stub
return 0;
}
});
System.out.println(res1);
}
}
当我运行代码时,TestPing(short param)- 函数将正确执行。TestDBConnection()-Function 给出以下异常:
没有回调的结果:30 有回调的结果:80
Java 运行时环境检测到一个致命错误:EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x05cae065, pid=4940, tid=1464
JRE 版本:7.0_25-b17 Java VM:Java HotSpot(TM) Client VM(23.25-b01 混合模式,共享 windows-x86) 有问题的框架:C [atproc32.dll+0x27e065]
无法写入核心转储。默认情况下,在 Windows 的客户端版本上不启用小型转储
包含更多信息的错误报告文件保存为:D:\Entwicklungstools\Java\workspace\AFPS_Airport_Service\hs_err_pid4940.log
如果您想提交错误报告,请访问: http ://bugreport.sun.com/bugreport/crash.jsp 崩溃发生在 Java 虚拟机之外的本地代码中。
请参阅有问题的框架以了解报告错误的位置。
在此先感谢您的帮助。