我必须调用一个dll方法而且我没有来自dll的源代码,我正在阅读有关JNI的内容并且理解您应该有源代码在代码(.h)中输入JNI库。
我的第二次拍摄是JNA,但我得到了同样的错误,尽管你不需要改变DLL中的任何内容。
我创建了两个要测试的类:
接口
package icom;
import com.sun.jna.Library;
public interface IConectorT extends Library {
int StartConector(byte[] conectorStatus, String icomPath);
}
DLL方法调用:
package icom;
import com.sun.jna.Native;
public class ConectorTJna {
public static void main(String args[]) {
IConectorT lib = (IConectorT) Native.loadLibrary("ConectorT", IConectorT.class);
int teste = lib.StartConector(null, "C:\\ICOM");
System.out.println("RESULT: " + teste);
}
}
当我调用lib.StartConector
方法时,我得到了这个:
线程“main”中的异常java.lang.UnsatisfiedLinkError:错误 查找函数'StartConector':指定的过程不能 被发现。在com.sun.jna.Function。(Function.java:179)at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:350)at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:330)at com.sun.jna.Library $ Handler.invoke(Library.java:203)at $ Proxy0.StartConector(未知来源)at icom.ConectorTJna.main(ConectorTJna.java:10)
答案 0 :(得分:1)
您是否指定了库的路径,例如使用系统属性?
以下是“JNA入门”指南中的详细信息:
使您的目标库可用于Java程序。那里有两个 方法:
首选方法是将 jna.library.path 系统属性设置为 目标库的路径。这个属性类似于 java.library.path ,但仅适用于JNA加载的库。
- 醇>
在启动之前更改相应的库访问环境变量 VM。这是Windows上的 PATH ,Linux上的 LD_LIBRARY_PATH ,以及 OSX上的 DYLD_LIBRARY_PATH 。
取自:https://github.com/twall/jna/blob/master/www/GettingStarted.md