JNA写入文件时无效的内存访问

由于debugging的原因,我正在写一个C ++ DLL的jna包装(用gcc和mingw32编译)

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的调用导致“java.lang.Error:无效的内存访问”,因为当我删除fprintf一切工作正常(我已经读取JNA中的线程无效的内存访问时,写入标准输出 )

如果你打开编译器中的警告( -Wall ),它会告诉你,你的格式字符串和实际参数不匹配。

"%x"需要一个int参数; 你正在提供const BYTE 。 通常情况下,我希望这只会产生垃圾,但取决于CPU,拱形和堆栈布局,您可能会遇到一系列故障。

您需要将mem[i]int (或使用与const BYTE兼容的格式)。