[英]JNA to call a DLL without source code from java
我必須調用一個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'時出錯:找不到指定的過程。 at 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)位於icom.ConectorTJna.main的$ Proxy0.StartConector(未知來源)(ConectorTJna.java:10)
您是否指定了庫的路徑,例如使用系統屬性?
以下是“JNA入門”指南中的詳細信息:
使目標庫可用於Java程序。 有兩種方法可以做到這一點:
首選方法是將jna.library.path系統屬性設置為目標庫的路徑。 此屬性類似於java.library.path ,但僅適用於JNA加載的庫。
在啟動VM之前更改相應的庫訪問環境變量。 這是PATH在Windows,Linux上的LD_LIBRARY_PATH,和DYLD_LIBRARY_PATH在OSX。
摘自: https : //github.com/twall/jna/blob/master/www/GettingStarted.md
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.