环境: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崩溃。
是的,我知道我可以使用缓冲区或内存或其他技巧,但这不是问题。问题是:为什么这不起作用?
编辑:只有在访问传入的参数时才会发生错误。如果函数立即返回(通过删除显示的行),则没有错误。