Java 如何使用JNA指针在内存中写入数据?
我有一个指向内存的指针,如:Java 如何使用JNA指针在内存中写入数据?,java,pointers,jna,Java,Pointers,Jna,我有一个指向内存的指针,如: Pointer pData = new Memory(65536); 我需要从位置8开始获取该内存的指针,因为我想将该部分内存(从8到65535)发送到本机C API 我用过: pData8 = pData.getPointer(8); 为了获得从位置8开始的指针,我尝试使用以下命令向pData8写入内容: pData8.setInt(0xAAAA); 只是为了验证我写的是正确的位置,但我得到了错误:无效的内存访问 如何获得指向内存某一部分的有效指针并能够在其
Pointer pData = new Memory(65536);
我需要从位置8开始获取该内存的指针,因为我想将该部分内存(从8到65535)发送到本机C API
我用过:
pData8 = pData.getPointer(8);
为了获得从位置8开始的指针,我尝试使用以下命令向pData8写入内容:
pData8.setInt(0xAAAA);
只是为了验证我写的是正确的位置,但我得到了错误:无效的内存访问
如何获得指向内存某一部分的有效指针并能够在其上进行写入
详情如下:
80 Pointer pM = new Memory(65536);
81 Pointer p = pM.getPointer(4);
82 pM.setInt(0, 0xFFFF);
83 p.setInt(0, 0xBBBB);
Exception in thread "main" java.lang.Error: Invalid memory access
at com.sun.jna.Native.setInt(Native Method)
at com.sun.jna.Pointer.setInt(Pointer.java:1124)
at it.caen.dig.Demo.main(Demo.java:83)
看起来您使用了错误的API
getPointer
将在该偏移处找到的值作为指针返回(可能不指向任何地方)。如果要获取指向该偏移量的指针,请使用share
:
使用给定的偏移量提供该内存的视图,以计算新的基址
Pointer pM = new Memory(65536);
Pointer p = pM.share(4);
pM.setInt(0, 0xFFFF);
p.setInt(0, 0xBBBB);