Выделение буфера символов с помощью JNA, Rhino, JavaScript - PullRequest
2 голосов
/ 24 января 2010

В Нарвале мы используем JNA для совершения libc вызовов, таких как getcwd и chdir. Я мог использовать это только при моих ограниченных знаниях интерфейса JNA, поскольку он относится к JavaScript в Rhino, имея дело исключительно с примитивами. Мне нужно знать, как выделить буфер символов, чтобы я мог передать его в getcwd, извлечь строку JavaScript из этого буфера и освободить буфер, предположительно в предложении finally.

Вот как мы получаем интерфейс libc:

http://github.com/280north/narwhal/blob/34ac15261fa4acdef3867256e97d7aabb94766e0/engines/rhino/lib/fs-base.js#L32-42

Вот как реализовано chdir:

http://github.com/280north/narwhal/blob/34ac15261fa4acdef3867256e97d7aabb94766e0/engines/rhino/lib/fs-base.js#L438-444

Вот где нам нужно решение для getcwd

http://github.com/280north/narwhal/blob/34ac15261fa4acdef3867256e97d7aabb94766e0/engines/rhino/lib/fs-base.js#L416-419

Решения на Ruby или любом другом встроенном языке для JNA помогут.

1 Ответ

1 голос
/ 24 января 2010

вы можете использовать nio.Buffer или jna.Pointer для передачи буфера вывода, что-то вроде:

invokeString(new jna.Memory(4097), 4097)

getcwd вернет символ * во входной буфер, поэтому jna будет маршалировать возврат в строку

для поддержки более длинных путей, вы можете взять дополнительную длину

в Java, новый файл ("."). GetAbsolutePath () может получить текущий путь, поэтому вам может не понадобиться getcwd ...

...