JNA和byte []

时间:2015-08-30 01:36:44

标签: java c++ windows jna

环境:Windows 32位,MSVC,Eclipse

C代码:

#define API2_API __declspec(dllexport)
extern "C" {
  API2_API bool ReadResult(void* data);
}

API2_API bool ReadResult(
  void* data)
{
  int x = *(char*)data; // <-- no error if this line deleted
  return false;
}

Java代码:

// API2: bool ReadResult(void* result_data);
public interface Api2 extends Library {
  public boolean ReadResult(byte[] result_data);
}

Api2 api = (Api2)Native.loadLibrary("Api2.dll", Api2.class);
byte[] result_data = new byte[10];
boolean ret2 = api.ReadResult(result_data);

呼叫失败,&#34;无效的内存访问&#34;。我已经尝试过其他调用类型和String,int和int []工作得很好。我的设置似乎没问题。这是唯一失败的。

我可以在Visual Studio调试器下运行它,并且传入指针看起来有效但不是。试图取消引用它会导致VS崩溃。

是的,我知道我可以使用缓冲区或内存或其他技巧,但这不是问题。问题是:为什么这不起作用?

编辑:只有在访问传入的参数时才会发生错误。如果函数立即返回(通过删除显示的行),则没有错误。

0 个答案:

没有答案