如何使用JNA Pointer在内存中写入数据?

时间:2018-06-01 07:46:35

标签: java pointers jna

我有一个指向记忆的指针,如:

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)

1 个答案:

答案 0 :(得分:1)

您似乎正在使用错误的API。 getPointer返回在该偏移量处找到的值作为指针(可能无处指向)。如果要获取指向该偏移量的指针,请使用share

  

使用给定的偏移量提供此内存的视图以计算新的基址。

Pointer pM = new Memory(65536);
Pointer p = pM.share(4);
pM.setInt(0, 0xFFFF);
p.setInt(0, 0xBBBB);