我正在尝试访问我在java代码中创建的VB .NET dll方法。 我正在尝试使用JNA来实现这一目标。
这是我的Java代码。
Hello.java(调用dll方法)
import com.sun.jna.Native;
public class Hello {
public static void main(String[] args) {
String myPath = System.getProperty("user.dir");
System.setProperty("java.library.path", myPath);
NativeInterface nInterface = (NativeInterface) Native.loadLibrary(
"SampleDLLProject", NativeInterface.class);
nInterface.HelloWorld();
}
}
这是界面 的 NativeInterface.java
import com.sun.jna.*;
public interface NativeInterface extends com.sun.jna.Library {
public void HelloWorld();
}
我面临的错误是:
线程“main”中的异常java.lang.UnsatisfiedLinkError:查找函数'HelloWorld'时出错:找不到指定的过程。 在com.sun.jna.Function。(Function.java:179) 在com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:345) 在com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:325) 在com.sun.jna.Library $ Handler.invoke(Library.java:203) 在$ Proxy0.HelloWorld(未知来源) 在Hello.main(Hello.java:10)
我还使用ildasm检查了dll是否存在任何差异。
dll中存在的方法名称与Hello.java中的名称没有区别。
有趣的是,我试图测试windows dll msvcrt.dll的puts()方法的代码,它运行得很好。所以问题出在DOT NET dlls上。 请帮忙!
答案 0 :(得分:1)
您正在使用的库是从 native 库(例如windows.dll和msvcrt.dll)加载方法,这些库被编译为可以直接在x86或x64处理器上运行的本机代码。
在VB.NET中创建的库是不本机库,它们是CLI(公共语言基础结构)程序集,它们被编译成CIL(通用中间语言),然后在运行中编译以运行任何一种处理器(就像Java!)