问题标签 [nativecall]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
396 浏览

raku - 包含指针的 N​​ativeCall 结构体

我有以下结构:

我这样表示这个结构NativeCall

这个代表好吗?如何访问和设置指向的数据$.pInfo

0 投票
1 回答
200 浏览

raku - Perl 6 NativeCall 和 C 源文件

在 Windows 和 Linux 上使用 NativeCall 为 C 库发布 Perl 6 绑定的最佳策略是什么?

开发者是否需要同时编译.dll和.so文件并用perl6代码上传到github?或者在 perl6 上有一个选项,比如 perl5,将 C 源文件与 Perl 6 代码捆绑在一起,C 编译器将作为 make 和 make install 的一部分运行?

0 投票
1 回答
246 浏览

ncurses - 本机调用接口:如何翻译“wchar_t”?

我想int addwstr(const wchar_t *wstr);在 Perl6 中使用 ncurses 函数。

我怎样才能获得传达const wchar_t *wstr的Perl 6 签名addwstr

0 投票
1 回答
1020 浏览

blocking - ncurses:为什么 getch 不等到我按下一个键?

从 ncurses(3) linux 手册页:

nodelay 选项使 getch 成为非阻塞调用。如果没有输入准备好,getch 返回 ERR。如果禁用(bf 为 FALSE),getch 会一直等到按键被按下。

为什么在我的示例中 getch 不等到我按下一个键?


0 投票
1 回答
118 浏览

c - 使用 Posix 分叉和管道的 NativeCall 代码不起作用

好的,所以我是 Perl 和 Perl 6 的新手。我想看看我是否可以让分叉和管道工作,但到目前为止还不能。这是我的 Perl 6 代码:

这是运行它的结果:

似乎该c_read()功能由于某种原因没有阻塞,这是不可能的。反正我对分叉了解不多。

任何想法修复是什么?

回答

2016 年 12 月 19 日更新

感谢@timotimo,我得到了一个可行的解决方案。看来我的努力可能会有所改进。例如,我认为它不能与 UTF-8 一起正常工作。Anyhoo,至少“它有效”。

现在按预期输出:

我已经创建了一个要点,并酌情修改了解决方案。

0 投票
2 回答
233 浏览

raku - 如何通过 Nativecall 回调传递 Perl 6 对象?

我正在使用 NativeCall 接口。

该库将多次调用我的回调函数。

这很好用。我可以用正确的签名声明我的回调,将它作为 &callback 传递,然后库调用 sub 就好了。

它还能够将有效负载 void *pointer 设置为我想要的任何内容,并将其包含在对我的回调函数的调用中。

例如,我可以在有效负载中隐藏一个 Perl Str 并成功往返吗?

似乎它可以与一些绑定咒语一起使用,“is rw”,nativecast() 和/或 .deref。

0 投票
2 回答
350 浏览

raku - 在 Perl 6 NativeCall 中将指针传递给指针

我正在尝试使用 NativeCall 与一些 C 函数进行交互。

对于一种情况,我需要传入由函数更新的指针,因此它需要一个指向指针“void **”的指针。

我试过这样:

它不起作用。指针不会被函数更新。

由于 C 数组基本上是指向指针的指针,因此我可以像这样伪造它:

它像这样工作得很好。看起来“is rw”应该强制指针指向指针,它应该以第一种方式工作。

我究竟做错了什么?

0 投票
2 回答
393 浏览

raku - 将结构数组传递给 Perl 6 NativeCall 函数

我正在尝试使用 NativeCall 与一些 C 函数进行交互。

我有一个简单的 C 结构和一个需要它们的数组的函数。

我尝试了很多方法,但似乎无法完全正确。

如何正确创建类 foo 的对象并设置它们的值,以及如何使它们的数组适合传递?

0 投票
1 回答
215 浏览

raku - 为 Perl 6 NativeCall 结构添加用户模式类型

Perl 6文档列出了一堆类型。其中一些,例如Str,具有更复杂的装箱/拆箱行为。

是否可以定义我自己的类型,为装箱/拆箱指定我自己的例程?对于一个特定的项目,我有一堆我正在重用的类型,并且基本上一遍又一遍地剪切/粘贴我的访问器函数。

例如,C 结构使用 a time_t,我插入访问器方法来访问/从 a DateTime。另一个例子是一个逗号分隔的列表,我想去/从一个Array并自动处理split/ join

有一个更好的方法吗?

编辑:添加示例:

这行得通,我可以以 Perl-ish 方式设置各个字段CStruct(没有左值,但我可以将它们作为参数传递)。

现在我想在许多结构中的许多字段中使用time_t,等,并让它们以相同的方式运行。FooType_t除了一遍又一遍地复制这些方法之外,还有更好的方法吗?

也许宏可以在这里提供帮助?我还没有掌握它们。

0 投票
1 回答
201 浏览

arrays - 结构数组作为 Perl 6 NativeCall 结构的属性

我正在尝试封装一个 C 结构,其中一个成员是指向结构的指针数组,但我在弄清楚如何去做时遇到了问题。

假设 C 代码如下所示:

这种代码有效:

但这很可怕。

ACArray在这里没有用,因为它只是一个指向数组的指针,而不是指针数组;我不能使用类似的东西has A @.a,因为 arepr('CStruct')不处理那种属性。

有什么提示吗?