在戒指中,我们正在使用JNA来制作 libc 呼叫 getcwdchdir. 。我只能以有限的了解JNA界面的了解,因为它与Rhino中的JavaScript有关,专门处理原语。我需要知道如何分配char缓冲区,以便我可以将其传递给 getcwd, ,从该缓冲区检索JavaScript字符串,然后对缓冲区进行处理,大概是在 finally 条款。

这是我们抓住的方式 libc 界面:

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

就是这样 chdir 已实施:

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

这是我们需要解决方案的地方 getcwd

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

Ruby或任何其他嵌入式JNA的解决方案都会有所帮助。

有帮助吗?

解决方案

您可以使用nio.buffer或jna.pointer传递输出缓冲区,例如:

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

getCWD会将char*返回到输入缓冲区,因此JNA将返回到字符串

为了支持更长的路径,您可以选择可选的长度

在Java,新文件(“。”)。GetAbsolutepath()可以获取当前路径,因此您可能不需要GetCWD ...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top