簡體   English   中英

JNA在沒有源代碼的情況下調用DLL

[英]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程序。 有兩種方法可以做到這一點:

  1. 首選方法是將jna.library.path系統屬性設置為目標庫的路徑。 此屬性類似於java.library.path ,但僅適用於JNA加載的庫。

  2. 在啟動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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM