ヘッダー ファイルから 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 *に渡す適切な方法は何ですか?