我正在使用 BTICARD.DLL ,这是 Arinc429 卡的dll。我需要在 Java 中为诸如BTICard_CardOpen
之类的功能编写包装器类。
我已经在 BTICardAPI.java 下面编写了一个接口:
package NLIPjt;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.Native;
// import com.sun.jna.ptr.IntByReference;
import com.sun.jna.Pointer;
public interface BTICardAPI extends StdCallLibrary {
BTICardAPI INSTANCE = (BTICardAPI) Native.loadLibrary("BTICARD", BTICardAPI.class);
int BTICard_CardOpen(Pointer LPHCARD, int cardnum);
}
和我的Java实现程序 BTICardTest.java :
package NLIPjt;
// import com.sun.jna.ptr.IntByReference;
import com.sun.jna.Pointer;
public class BTICardTest {
public static void main(String args[]) {
BTICardAPI BTI1 = BTICardAPI.INSTANCE;
int iErr;
int CardNo = 0;
Pointer CardHandle = null;
iErr = BTI1.BTICard_CardOpen(CardHandle, CardNo);
System.out.println("Error Value: " + iErr);
}
}
我在netbeans IDE中遇到以下错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'BTICard_CardOpen': The specified procedure could not be found.
at com.sun.jna.Function.<init>(Function.java:245)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:566)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:542)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:528)
at com.sun.jna.Library$Handler.invoke(Library.java:228)
at com.sun.proxy.$Proxy0.BTICard_CardOpen(Unknown Source)
at NLIPjt.BTICardTest.main(BTICardTest.java:14)
寻找解决方案!
答案 0 :(得分:0)
根据documentation,您需要使该库可用。有三种方法可以做到这一点。
使目标库可用于Java程序。有 几种方法可以做到这一点:
首选方法是将jna.library.path系统属性设置为 目标库的路径。该属性类似于 java.library.path,但仅适用于JNA加载的库。
在更改适当的库访问环境变量之前 启动虚拟机。在Windows上是PATH,在Linux上是LD_LIBRARY_PATH, 和OSX上的DYLD_LIBRARY_PATH。
在路径下的类路径中提供本地库 {OS}-{ARCH} / {LIBRARY},其中{OS}-{ARCH}是JNA的规范前缀 本机程式库(例如win32-x86,linux-amd64或darwin)。如果 资源在jar文件中,它将在以下情况下自动提取 加载。