0

我使用 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 虚拟机之外的本地代码中。

请参阅有问题的框架以了解报告错误的位置。

在此先感谢您的帮助。

4

0 回答 0