java.lang.UnsatisfiedLinkError。查找函数出错

问题描述 投票:1回答:1

我想利用一个用visual basic编写的.dll。 我没有写它,所以没有它的源代码。 我可以加载它,并显示里面的方法,但当我试图调用一个方法时,得到 "java.lang.UnsatisfiedLinkError: 错误查找函数"。 这是我的代码。

package dlltest;
import com.sun.jna.Library;
import com.sun.jna.Native;
import java.lang.reflect.Method;
import java.util.Collection;

public class DllTest {
    public interface TC2005 extends Library {
        public boolean TCEnabled();
    }

    public static void main(String[] args) {
        TC2005 tc2005 = (TC2005)Native.loadLibrary("TC2000Dev",TC2005.class);
        Method[] methods = tc2005.getClass().getDeclaredMethods();
        for (Method method:methods) System.out.println(method);
        System.out.println("TCEnabled="+tc2005.TCEnabled());
    }

}

这是输出结果

public final boolean com.sun.proxy.$Proxy0.TCEnabled()

Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'TCEnabled': The specified procedure could not be found.

    at com.sun.jna.Function.<init>(Function.java:179)
    at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:345)
    at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:325)
    at com.sun.jna.Library$Handler.invoke(Library.java:203)
    at com.sun.proxy.$Proxy0.TCEnabled(Unknown Source)
    at dlltest.DllTest.main(DllTest.java:70)

还有更多的函数和输出,但为了清楚起见,只显示一个。

看了一天关于这个问题的帖子,毫无收获。 有些人说编译器把方法名弄乱了,因此需要一个FunctionMapper代码。 为了得到真正的方法名,每个人都说要用Dependency Walker。 试着用它来加载.dll,出错很多。 也试过加载一个使用.dll的.exe,然后运行DW中的Profiler选项。 这锁定了程序。(不响应)。

有什么建议?

java dll jna unsatisfiedlinkerror
1个回答
0
投票

请交叉检查你的版本。你需要的函数在加载的.dll中不存在。这样的情况在版本不正确的情况下也会出现。

© www.soinside.com 2019 - 2024. All rights reserved.