[英]JNA Parameter Problems: Invalid memory Access
我想通过JNA在Java中调用函数“ mytestFunction”。 这就是我在C ++中调用方法的方式:
size_t input_length = 67U;
uint8_t input[67U] = { 0x30, 0x41, 0x80, ....};
uint8_t *output_buffer = NULL;
size_t output_length = 0;
uint32_t errorCode = 0;
errorCode = mytestFunction(input, input_length, &output_buffer, &output_length);
这就是我用Java调用方法的方式:
IcbdpClient cbdpFuncs = (IcbdpClient) Native.load("myDLL.dll", IcbdpClient.class);
int[] input = new int[]{0x30, 0x41, 0x80, ....};
SizeT input_length = new SizeT(input.length);
Pointer output_buffer = new Memory(1);
SizeT output_length = new SizeT(0);
err = cbdpFuncs.mytestFunction(input, input_length, output_buffer, output_length);
我已经调用了一个只有一个byte []参数的方法。 一切正常。 但是现在当我执行cbdpFuncs.mytestFunction时,我得到“ java.lang.Error:无效的内存访问”。 我认为我处理了参数false output_buffer和output_length。 但是我不知道什么是正确的方法。
编辑:在ICdpClient中,mytestFunction的调用方式如下:
int mytestFunction (int[] input, SizeT input_length, Pointer output_buffer, SizeT output_length);
我找到了解决方案:问题是我声明了output_buffer和output_length为false:这是正确的形式:
PointerByReference output_buffer = new PointerByReference();
IntByReference output_length = new IntByReference();
如果您之后要使用Pointer,请参见此处: https : //github.com/java-native-access/jna/blob/master/www/ByRefArguments.md
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.