我正在尝试在Java中使用本机C ++库。
当我用
加载它时System.loadLibrary(filename);
我收到错误:
java.lang.UnsatisfiedLinkError中: 不应出现目录分隔符 在库名中:C:\ HelloWorld.dll
我有什么想法可以解决这个问题吗?
答案 0 :(得分:4)
答案 1 :(得分:3)
只需使用:
System.loadLibrary("HelloWorld"); // without c:\ and without ".dll" extension
另外,请确保您的图书馆路径上有HelloWorld.dll
。
答案 2 :(得分:0)
我用JNA做到了......
JNA是一种调用Native函数的简单方法,它提供的NativeLibrary类可用于完成此任务:
//调用本机函数的Java代码
dll = NativeLibrary.getInstance(Mydll);
Function proxy;
proxy = dll.getFunction(Utils.getMethods().get("MyMethodEntryPoint"));
byte result[] = new byte[256];
int maxLen = 250;
String strVer = "";
Object[] par = new Object[]{result, maxLen};
intRet = (Integer) proxy.invoke(Integer.class, par);
if (intRet == 0) {
strVer = Utils.byteToString(result);
}
找到文档
答案 3 :(得分:-1)
令人惊讶的是,也可以使用以下内容:
final File dll = new File("src/lib/Tester32.dll");
Test32 test32 = (Test32) Native.loadLibrary(dll.getAbsolutePath(), Test32.class);
System.out.println(test32.toString() + " - " + test32.GetLastError());
输出:
Proxy interface to Native Library <C:\workspace\jna\src\lib\Tester32.dll@387842048> - 0
Javadoc说:
的LoadLibrary
public static Object loadLibrary(String name, 类interfaceClass)
将库接口映射到给定的 共享库,提供显式 接口类。如果name为null, 尝试映射到当前 过程
如果我将Tester32.dll
文件夹中的.\src\lib
重命名为其他内容,则会发生以下异常:
线程“main”中的异常 java.lang.UnsatisfiedLinkError:无法使用 加载库 'C:\工作空间\ JNA \ SRC \ lib中\ Tester32.dll': 指定的模块不能 找到。