使用JNA,Rhino,JavaScript分配char缓冲区

时间:2010-01-23 23:57:06

标签: javascript rhino jna libc commonjs

在Narwhal,我们正在使用JNA拨打libcgetcwdchdir来电。我只能用我对JNA接口的有限知识来使用它,因为它与Rhino中的JavaScript有关,专门处理原语。我需要知道如何分配一个char缓冲区,这样我就可以将它传递给getcwd,从该缓冲区中检索一个JavaScript String,并释放缓冲区,大概是在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 个答案:

答案 0 :(得分:1)

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

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

getcwd会将一个char *返回到输入缓冲区,因此jna会将返回值设置为字符串

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

在java中,新文件(“。”)。getAbsolutePath()可以获取当前路径,因此您可能不需要getcwd ......