私はJavaとJNAの初心者です。JNA を使用して、Java からネイティブ DLL 関数をロードして使用しています。
ポインターを配列に渡す際に問題に直面しています。仕様に従って、Java からこの配列にデータを入力し、この配列へのポインターを DLL に送信しようとしています。
これは、ネイティブ コールの外観です。
StartCom(UNUM8 *pCoPData)
From the spec: pCoPData -> Reference of the buffer holding the data
対応する JNA マッピング、
int[] buf = new int[2];
buf[0] = 0x1A;
buf[1] = 0x10;
Pointer pCoPData = new Memory(8);
pCoPData.write(0, buf, 0, buf.length);
Library.INSTANCE.StartCom(pCoPData);
上記のコードを実行すると、配列 0x1A の最初の要素のみが使用され、2 番目のバイトが無視されることが dll ログからわかります。DLL は、常に配列の最初の要素のみを認識します。
この問題が発生する可能性は 2 つしかないと考えています。
1. The above approach I have taken to populate and send the address of a Java array to the DLL is incorrect.
2. The DLL is expecting a UNUM8* whereas I am sending a UNUM32*. I will try with byte[] instead of int[] and see if there is any difference.
どんな提案も大いに役立ちますか? 私にお知らせください。よろしくお願いします!