我使用JNA来调用3.方提供的.dll用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(短参数) - 函数将被正确执行。 TestDBConnection() - 函数给出以下异常:
没有回调的结果:30 回调结果:80
Java运行时环境检测到致命错误: pc = 0x05cae065的EXCEPTION_ACCESS_VIOLATION(0xc0000005),pid = 4940,tid = 1464
JRE版本:7.0_25-b17 Java VM:Java HotSpot(TM)客户端VM(23.25-b01混合模式,共享windows-x86) 有问题的框架: C [atproc32.dll + 0x27e065]
无法编写核心转储。默认情况下,在Windows的客户端版本
上未启用小型转储包含更多信息的错误报告文件保存为: d:\ Entwicklungstools \爪哇\工作空间\ AFPS_Airport_Service \ hs_err_pid4940.log
如果您想提交错误报告,请访问: http://bugreport.sun.com/bugreport/crash.jsp 崩溃发生在Java虚拟机之外的本机代码中。
提前感谢您的帮助。