查找函数'HelloWorld'时出错:找不到指定的过程

时间:2014-06-10 11:58:56

标签: java .net dll jna

我正在尝试访问我在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是否存在任何差异。

enter image description here

dll中存在的方法名称与Hello.java中的名称没有区别。

有趣的是,我试图测试windows dll msvcrt.dll的puts()方法的代码,它运行得很好。所以问题出在DOT NET dlls上。 请帮忙!

1 个答案:

答案 0 :(得分:1)

您正在使用的库是从 native 库(例如windows.dll和msvcrt.dll)加载方法,这些库被编译为可以直接在x86或x64处理器上运行的本机代码。

在VB.NET中创建的库是本机库,它们是CLI(公共语言基础结构)程序集,它们被编译成CIL(通用中间语言),然后在运行中编译以运行任何一种处理器(就像Java!)