Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RGiesecke.DllExport内存访问无效_Java_Dll_Jna - Fatal编程技术网

Java RGiesecke.DllExport内存访问无效

Java RGiesecke.DllExport内存访问无效,java,dll,jna,Java,Dll,Jna,我有一个设备驱动程序DLL。我用C#编写了一个包装器DLL,通过使用RGiesecke.DllExport,我试图从Java应用程序调用C#包装器 我在Java端使用JNA 4.1并调用包装器dll,如下所示 IMathFuncs mathFuncs = (IMathFuncs)Native.loadLibrary("C://path2dll//theDLL.dll", IMathFuncs.class); 我可以成功地从Java调用基本的C#“hello world”函数。但是当我调用一个使

我有一个设备驱动程序DLL。我用C#编写了一个包装器DLL,通过使用RGiesecke.DllExport,我试图从Java应用程序调用C#包装器

我在Java端使用JNA 4.1并调用包装器dll,如下所示

IMathFuncs mathFuncs =
(IMathFuncs)Native.loadLibrary("C://path2dll//theDLL.dll", IMathFuncs.class);
我可以成功地从Java调用基本的C#“hello world”函数。但是当我调用一个使用设备驱动程序类的函数时,我得到了下面的错误

mathFuncs.sayHello(); // runs fine
mathFuncs.useDevice(); // throws invalid memory access err.


Exception in thread "main" java.lang.Error: Invalid memory access
at com.sun.jna.Native.invokePointer(Native Method)
at com.sun.jna.Function.<init>(Function.java:208)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:536)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:513)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:499)
at com.sun.jna.Library$Handler.invoke(Library.java:199)
at $Proxy0.useDevice(Unknown Source)
at MathFuncs.main(MathFuncs.java:16)
mathFuncs.sayHello();//运行良好
mathFuncs.useDevice();//抛出无效内存访问错误。
线程“main”java.lang中出现异常。错误:内存访问无效
位于com.sun.jna.Native.invokeInter(本机方法)
位于com.sun.jna.Function.(Function.java:208)
位于com.sun.jna.nativellibrary.getFunction(nativellibrary.java:536)
位于com.sun.jna.nativellibrary.getFunction(nativellibrary.java:513)
位于com.sun.jna.nativellibrary.getFunction(nativellibrary.java:499)
位于com.sun.jna.Library$Handler.invoke(Library.java:199)
位于$Proxy0.useDevice(未知来源)
位于MathFuncs.main(MathFuncs.java:16)
有什么我遗漏的吗?如何使设备驱动程序DLL可用于我的java应用程序


提前感谢

包括您的本机声明和相应的Java映射。很可能是将未分配或未初始化的内存传递给本机函数,或者映射不正确,因此设置了一个无效堆栈供本机代码访问。谢谢您的评论。如何包含本机声明?这些声明通常位于C头文件“.h”中。