java.lang.unsatifiedLinkError:查找函数时出错

7vhp5slm  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(327)

我正在尝试使用用visualbasic编写的.dll。我没有写,所以没有源代码。我可以正常加载它并显示其中的方法,但是在尝试调用函数时得到“java.lang.unsatifiedLinkError:error looking up function”。这是我的密码:

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中运行探查器选项。锁定程序(没有React)。
建议?

pexxcrt2

pexxcrt21#

交叉检查你的版本。您需要加载的.dll中不存在的函数。这种情况可以看到不正确的版本。

相关问题