【问题标题】:Error looking up function 'HelloWorld': The specified procedure could not be found查找函数“HelloWorld”时出错:找不到指定的过程
【发布时间】:2014-06-10 21:26:13
【问题描述】:

我正在尝试访问我在 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 dll 上。 请帮忙!

【问题讨论】:

    标签: java .net dll jna


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-24
      • 1970-01-01
      • 2013-01-31
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      相关资源
      最近更新 更多