Java/JNA正在为字节数组创建指针,以传递给需要LPSTR参数的本机方法

Java/JNA正在为字节数组创建指针,以传递给需要LPSTR参数的本机方法,java,jna,Java,Jna,我想将指向byte[]数组的指针传递给本机 例行公事。我没有任何能力修改本机代码。我只能利用它 该方法需要LPSTR数据类型中的图像。我看过其他使用本机例程的C代码。 它们似乎在传递字节数组 因此,我的过程是获取一个缓冲映像对象,获取映像对应的字节数组,并尝试将其传递给本机例程。 我尝试直接传递数组,尝试将数组写入内存,还尝试传递bytebuffer。我仍然不断收到“无效内存访问”异常 使用内存类: byte[] imageBytes = getImageBytes(image); Pointe

我想将指向byte[]数组的指针传递给本机 例行公事。我没有任何能力修改本机代码。我只能利用它

该方法需要LPSTR数据类型中的图像。我看过其他使用本机例程的C代码。 它们似乎在传递字节数组

因此,我的过程是获取一个缓冲映像对象,获取映像对应的字节数组,并尝试将其传递给本机例程。 我尝试直接传递数组,尝试将数组写入内存,还尝试传递bytebuffer。我仍然不断收到“无效内存访问”异常

使用内存类:

byte[] imageBytes = getImageBytes(image);
Pointer imagePointer = new Memory(imageBytes.length);
imagePointer.write(0, imageBytes, 0, imageBytes.length);
nativeInterface.SendImageData(port, imagePointer, x, y, w, h);
使用ByteBuffer:

ByteBuffer bBuffer = ByteBuffer.allocateDirect(imageBytes.length);
bBuffer.put(imageBytes);
Pointer imagePointer = Native.getDirectBufferPointer(bBuffer);
return cspStatInterface.SendImageData(port, imagePointer, x, y, w, h);
直接传递字节数组:

byte[] imageBytes = getImageBytes(image);
nativeInterface.SendImageData(port, imageBytes, x, y, w, h);

我到处找,似乎找不到解决办法。我已经验证过,字节数组中也填充了适当的数据。我没有正确构造指针吗?有没有更好的方法来创建指针?

如果指针是LPSTR,在接收代码或它调用的代码中,是否有任何东西在结尾处需要空字符?请包含您的本机声明。本机代码需要多大的像素?通常8位对于一个图像像素来说是不够的。我相信你们都是对的。在重新调整内存对象的大小(wxhx4)后,我能够成功地完成对本机函数的调用。本机调用实际上从提供的数据中获取数据并打印图像。目前,打印的图像看起来乱七八糟。因此,我必须向本机方法提供不适当的像素数据,但这是另一个问题。顺便说一下,本机函数声明是:long SendImagedata(long portNum,LPSTR buffer,long XPos,long YPos,long width,long height)(buffer:数据是RGB 24位彩色数据)添加了jna项目成员的响应:“您的本机函数声明是什么?如果您的本机代码确实需要一个缓冲区,那么传递
byte[]
应该可以工作,但您需要确保它有足够的大小。您的本机代码很可能希望您的单个像素的大小大于一个字节,并且会从分配的内存结束处溢出。请尝试传入一个大小为w X h X 4的内存对象,并将其内容归零,或者传入一个
int[]
的大小为w X h。或者,您可以设置w=h=1和X=y=0,以确保本机代码只读取一个“像素”