Как записать данные в память, используя JNA Pointer? - PullRequest
0 голосов
/ 01 июня 2018

У меня есть указатель на память типа:

Pointer pData = new Memory(65536);

, и мне нужно получить указатель этой памяти, начиная с позиции 8, потому что я хочу отправить эту часть памяти (от 8 до 65535) к собственному API C.

Я использовал:

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 голосов
/ 01 июня 2018

Похоже, вы используете неправильный API.getPointer возвращает значение, найденное в этом смещении, в качестве указателя (который, вероятно, нигде не указывает).Если вы хотите получить указатель на это смещение, используйте share:

. Предоставьте представление этой памяти, используя данное смещение для вычисления нового базового адреса.

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