我正在尝试使用用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)。
建议?
1条答案
按热度按时间pexxcrt21#
交叉检查你的版本。您需要加载的.dll中不存在的函数。这种情况可以看到不正确的版本。