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 用于运行DLL中声明的方法的代码_Java_Eclipse_Dll_Jna - Fatal编程技术网

Java 用于运行DLL中声明的方法的代码

Java 用于运行DLL中声明的方法的代码,java,eclipse,dll,jna,Java,Eclipse,Dll,Jna,我创建了一个Java代码,试图访问myAPI.dll中定义的类IProjectFactory的方法LoadProject。DLL文件的描述是:IProjectFactory用于将项目文件加载到内存中。IProjectFactory是myAPI.dll程序集中的静态类。它公开了LoadProject方法,该方法采用包含要加载的文件路径的字符串,并返回对结果IProject的引用。然后,使用IProject接口,您可以以各种方式操纵加载的项目 } 运行此代码后,生成以下错误消息: Exception

我创建了一个Java代码,试图访问
myAPI.dll
中定义的类
IProjectFactory
的方法
LoadProject
。DLL文件的描述是:IProjectFactory用于将项目文件加载到内存中。IProjectFactory是myAPI.dll程序集中的静态类。它公开了LoadProject方法,该方法采用包含要加载的文件路径的字符串,并返回对结果IProject的引用。然后,使用IProject接口,您可以以各种方式操纵加载的项目

}

运行此代码后,生成以下错误消息:

Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Error looking up function 'LoadProject': The specified procedure could not be found.

    at com.sun.jna.Function.<init>(Function.java:179)
    at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:350)
    at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:330)
    at com.sun.jna.Library$Handler.invoke(Library.java:203)
    at $Proxy0.LoadProject(Unknown Source)
线程“AWT-EventQueue-0”java.lang.UnsatifiedLinkError中出现异常:查找函数“LoadProject”时出错:找不到指定的过程。 位于com.sun.jna.Function.(Function.java:179) 位于com.sun.jna.nativellibrary.getFunction(nativellibrary.java:350) 位于com.sun.jna.nativellibrary.getFunction(nativellibrary.java:330) 位于com.sun.jna.Library$Handler.invoke(Library.java:203) 位于$Proxy0.LoadProject(未知源) 这是否意味着
myAPI
不包含方法为
LoadProject
的IProjectFactory类?

您可以使用JNI或JNA调用本机库中的函数。基本类型被映射。某些结构也是可能的。甚至回调函数也是可能的。请参阅JNA的映射表

设计上不可能的是:获得一个为不同运行时环境(如CLR)设计的类或接口,并在JVM中无缝地使用它

因此,如果您有一个只返回指针或基元类型的本机过程/函数库,那么您可以很好地使用它

如果您需要处理返回的对象,那么您就不走运了。您需要在其本机环境中运行它们,并找到某种进程间通信的方式。

您可以使用JNI或JNA调用本机库中的函数。基本类型被映射。某些结构也是可能的。甚至回调函数也是可能的。请参阅JNA的映射表

设计上不可能的是:获得一个为不同运行时环境(如CLR)设计的类或接口,并在JVM中无缝地使用它

因此,如果您有一个只返回指针或基元类型的本机过程/函数库,那么您可以很好地使用它


如果您需要处理返回的对象,那么您就不走运了。您需要在它们的本地环境中运行它们,并找到一些进程间通信的方式。

我有一个用C#编写的示例。这个例子展示了如何从myAPI.dll访问LoadProject方法,这是可行的。我尝试用Java做同样的事情。所以,如果在C#中有可能,我假设在Java中也有可能,对吗?不,C#字节码是在CLR上运行的,就像Java字节码是在JVM上运行的一样。它们不能互换。“DLL”可能是误导性的部分:在本例中,它是C#/CLR内容的容器,而不是可以使用的函数库。难怪C#会使用它。Java不能。好的,那么我是否正确地理解了绝对没有办法从Java使用此DLL?有趣的是,描述中说:提供了一个可由第三方软件直接引用的.NET程序集(myAPI.DLL)。请注意,此程序集是构建为体系结构无关的。JNA仅识别C/C++/assembly DLL签名。.NET DLL使用不兼容的DLL签名。对于.NETC#管理的DLL库,您需要将其互操作到C/C++DLL中,然后才能通过JNA使用它。有这样做的指南,但我不记得它在哪里。我有一个用C#写的例子。这个例子展示了如何从myAPI.dll访问LoadProject方法,这是可行的。我尝试用Java做同样的事情。所以,如果在C#中有可能,我假设在Java中也有可能,对吗?不,C#字节码是在CLR上运行的,就像Java字节码是在JVM上运行的一样。它们不能互换。“DLL”可能是误导性的部分:在本例中,它是C#/CLR内容的容器,而不是可以使用的函数库。难怪C#会使用它。Java不能。好的,那么我是否正确地理解了绝对没有办法从Java使用此DLL?有趣的是,描述中说:提供了一个可由第三方软件直接引用的.NET程序集(myAPI.DLL)。请注意,此程序集是构建为体系结构无关的。JNA仅识别C/C++/assembly DLL签名。.NET DLL使用不兼容的DLL签名。对于.NETC#管理的DLL库,您需要将其互操作到C/C++DLL中,然后才能通过JNA使用它。有这样做的指南,但我不记得它在哪里。
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Error looking up function 'LoadProject': The specified procedure could not be found.

    at com.sun.jna.Function.<init>(Function.java:179)
    at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:350)
    at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:330)
    at com.sun.jna.Library$Handler.invoke(Library.java:203)
    at $Proxy0.LoadProject(Unknown Source)