繁体   English   中英

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

[英]JNA Invalid memory access when writing to file

出于调试原因,我正在为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时一切正常(我已经在写入stdout时读取了JNA中的线程无效的内存访问

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM