デバッグ上の理由から、C++ DLL (gcc および mingw32 でコンパイル) 用の jna ラッパーを作成しています。
write16Byte.dll
void write16Byte(const BYTE* mem) {
FILE* out = fopen("BSTRvalues.txt", "a+");
if (out == NULL) {
printf("Error opening file!\n");
return;
}
for (int i=0; i<16; i++) fprintf(out, "0x%x ", mem[i]);
fwprintf(out, L"\n");
fclose(out);
}
jna ラッパー
public interface W16BDll extends com.sun.jna.Library {
W16BDll INSTANCE = (W16BDll)com.sun.jna.Native.loadLibrary("write16Byte.dll", W16BDll.class);
void write16Byte(com.sun.jna.Memory version);
}
fprintf を削除するとすべて正常に動作するため、 fprintf の呼び出しは「java.lang.Error: Invalid memory access」になります (標準出力への書き込み時に JNA Invalid memory accessのスレッドを既に読み込んでいます) 。