Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JNA指针在内存中写入数据?_Java_Pointers_Jna - Fatal编程技术网

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);