1

ヘッダー ファイルから JNA を生成しました。ここに、関心のある 2 つの関数を示します。

FT_STATUS FT_OpenEx(void* pArg1,int Flags,void** pHandle);

FT_STATUS FT_Close(void* ftHandle);

そして、これがJNAでどのように変換されたかです。

int FT_OpenEx(String pArg1, int Flags, PointerByReference pHandle);

int FT_Close(Pointer ftHandle);

PointerByReference を渡して FT_OpenEx を呼び出し、ポインターを取得して FT_Close に渡します。コードは実行されますが、FT_Close によって返される FT_INVALID_HANDLE を受け取ります。

ここにJavaコードがあります

 Pointer handle;
 PointerByReference pbr = new PointerByReference();
 int status = Ftd2xxLibrary.INSTANCE.FT_OpenEx(serialNumber, Ftd2xxLibrary.FT_OPEN_BY_SERIAL_NUMBER, pbr);

 handle = pbr.getPointer();

 status = Ftd2xxLibrary.INSTANCE.FT_Close(handle);

私の推測では、FT_Close に渡すポインターは、実際には正しいアドレスを指していません。JNAを使用してJavaでvoid **からvoid *に渡す適切な方法は何ですか?

4

1 に答える 1