第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試訪問 JNA 函數(shù)時出現(xiàn) IllegalArgumentException

嘗試訪問 JNA 函數(shù)時出現(xiàn) IllegalArgumentException

躍然一笑 2023-03-23 14:15:01
我是 JNA 的新手,需要通過 Java 系統(tǒng)的套接字連接將數(shù)據(jù)發(fā)送到遺留 C 系統(tǒng)。我已獲得 .dll 和 .h 文件。我必須使用 .h 文件定義訪問 C 系統(tǒng)中的函數(shù)。我加載了 .dll,當我訪問 dll 中的函數(shù)時,我得到 IllegalArgumentExceptionpublic static void main(String[] args) {    Arg arg = new Arg();    ExampleDLL exampleDLL = ExampleDLL.INSTANCE;    System.out.println(exampleDLL.someFunctionInDLL(arg));}public interface ExampleDLL extends Library {    ExampleDLL INSTANCE = (ExampleDLL) Native.loadLibrary("exampleDLL.dll", ExampleDLL.class);    int someFunctionInDLL(Arg arg);}public class Arg {    public Byte[] var1 = new Byte[9];    public Byte[] var2 = new Byte[5];    // Getters and Setters....}來自.h 文件:typedef struct{       char var1[9];       char var2[5];                   }Arg;int someFunctionInDLL(Arg *dr);我想我已經成功加載了 dll,但是當我嘗試訪問 dll 函數(shù)時:Exception in thread "main" java.lang.IllegalArgumentException: Unsupported argument type com.*.*.*.Arg at parameter 0 of function someFunctionInDLL幫助將不勝感激。有點堅持這個了一段時間。提前致謝。
查看完整描述

1 回答

?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

歡迎來到堆棧溢出。您收到錯誤是因為您的函數(shù)期望的參數(shù)是一個指針,但您為它提供了一個完整的 Java 類。

int someFunctionInDLL(Arg *dr);

您定義的類Arg應該是一個Structure. 默認情況下,當用作函數(shù)參數(shù)時,JNA 將 a 轉換Strcuture為其指針 ( ),而這正是您希望在此處發(fā)生的情況。Structure.ByReference您應該能夠通過制作Argextend來修復您的代碼Structure。

此外,您將字節(jié)映射到裝箱Byte對象是錯誤的:您需要原語byte@FieldOrder所以這應該可行(您還需要添加注釋):

public class Arg extends Structure { 
   public byte[] var1 = new byte[9]; 
      public byte[] var2 = new byte[5];
}


查看完整回答
反對 回復 2023-03-23
  • 1 回答
  • 0 關注
  • 216 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號