调用C#dll后Java jna异常_访问#冲突
我使用JNA调用一个3。用C#编写的party提供的.dll。这是我使用dll的代码:调用C#dll后Java jna异常_访问#冲突,c#,database-connection,user-defined-functions,access-violation,jna,C#,Database Connection,User Defined Functions,Access Violation,Jna,我使用JNA调用一个3。用C#编写的party提供的.dll。这是我使用dll的代码: public class Main{ public interface AirtrackDLL extends Library{ AirtrackDLL INSTANCE = (AirtrackDLL)Native.loadLibrary("atproc32.dll",AirtrackDLL.class); static interface TestPing extends Ca
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()-函数给出以下异常:
不带回调的结果:30 带回调的结果:80 Java运行时环境检测到一个致命错误: pc=0x05cae065、pid=4940、tid=1464时的异常访问(0xc0000005) JRE版本:7.0_25-b17 Java虚拟机:Java热点(TM)客户端虚拟机(23.25-b01混合模式,共享windows-x86) 有问题的框架: C[atproc32.dll+0x27e065] 无法写入核心转储。默认情况下,在客户端版本的Windows上不启用小型转储 包含详细信息的错误报告文件另存为: D:\entwicklungtools\Java\workspace\AFPS\u Airport\u Service\hs\u err\u pid4940.log 如果您想提交错误报告,请访问: 崩溃发生在Java虚拟机外部的本机代码中 有关报告错误的位置,请参见问题框。
提前感谢您的帮助。请出示本机声明。谢谢您的回复@technomage。我没有dll代码。我只是有dll需要和提供的方法和参数。在本例中,是在接口中定义的函数(TestPing(short param)和TestDBConnection()。函数TestPing(short param)运行时没有问题……@technomage请尝试并获得它。如果可以的话,请不要使用shore…让我们试试。如果您有一个头文件,它将包含本机函数的声明,这些声明表示编译器(以及JNA)需要的基本信息,以便正确地将调用映射到二进制DLL中。Hey@technomage感谢您的帮助。我们解决了这个问题。我调用的dll是C#。C++调用C++并返回值。难怪回到java世界后指针就不起作用了。如何解决这些问题?