问题标签 [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.
raku - 包含指针的 NativeCall 结构体
我有以下结构:
我这样表示这个结构NativeCall
:
这个代表好吗?如何访问和设置指向的数据$.pInfo
?
raku - Perl 6 NativeCall 和 C 源文件
在 Windows 和 Linux 上使用 NativeCall 为 C 库发布 Perl 6 绑定的最佳策略是什么?
开发者是否需要同时编译.dll和.so文件并用perl6代码上传到github?或者在 perl6 上有一个选项,比如 perl5,将 C 源文件与 Perl 6 代码捆绑在一起,C 编译器将作为 make 和 make install 的一部分运行?
ncurses - 本机调用接口:如何翻译“wchar_t”?
我想int addwstr(const wchar_t *wstr);
在 Perl6 中使用 ncurses 函数。
我怎样才能获得传达const wchar_t *wstr
的Perl 6 签名addwstr
?
blocking - ncurses:为什么 getch 不等到我按下一个键?
从 ncurses(3) linux 手册页:
nodelay 选项使 getch 成为非阻塞调用。如果没有输入准备好,getch 返回 ERR。如果禁用(bf 为 FALSE),getch 会一直等到按键被按下。
为什么在我的示例中 getch 不等到我按下一个键?
c - 使用 Posix 分叉和管道的 NativeCall 代码不起作用
好的,所以我是 Perl 和 Perl 6 的新手。我想看看我是否可以让分叉和管道工作,但到目前为止还不能。这是我的 Perl 6 代码:
这是运行它的结果:
似乎该c_read()
功能由于某种原因没有阻塞,这是不可能的。反正我对分叉了解不多。
任何想法修复是什么?
回答
2016 年 12 月 19 日更新
感谢@timotimo,我得到了一个可行的解决方案。看来我的努力可能会有所改进。例如,我认为它不能与 UTF-8 一起正常工作。Anyhoo,至少“它有效”。
现在按预期输出:
我已经创建了一个要点,并酌情修改了解决方案。
raku - 如何通过 Nativecall 回调传递 Perl 6 对象?
我正在使用 NativeCall 接口。
该库将多次调用我的回调函数。
这很好用。我可以用正确的签名声明我的回调,将它作为 &callback 传递,然后库调用 sub 就好了。
它还能够将有效负载 void *pointer 设置为我想要的任何内容,并将其包含在对我的回调函数的调用中。
例如,我可以在有效负载中隐藏一个 Perl Str 并成功往返吗?
似乎它可以与一些绑定咒语一起使用,“is rw”,nativecast() 和/或 .deref。
raku - 在 Perl 6 NativeCall 中将指针传递给指针
我正在尝试使用 NativeCall 与一些 C 函数进行交互。
对于一种情况,我需要传入由函数更新的指针,因此它需要一个指向指针“void **”的指针。
我试过这样:
它不起作用。指针不会被函数更新。
由于 C 数组基本上是指向指针的指针,因此我可以像这样伪造它:
它像这样工作得很好。看起来“is rw”应该强制指针指向指针,它应该以第一种方式工作。
我究竟做错了什么?
raku - 将结构数组传递给 Perl 6 NativeCall 函数
我正在尝试使用 NativeCall 与一些 C 函数进行交互。
我有一个简单的 C 结构和一个需要它们的数组的函数。
我尝试了很多方法,但似乎无法完全正确。
如何正确创建类 foo 的对象并设置它们的值,以及如何使它们的数组适合传递?
raku - 为 Perl 6 NativeCall 结构添加用户模式类型
Perl 6文档列出了一堆类型。其中一些,例如Str
,具有更复杂的装箱/拆箱行为。
是否可以定义我自己的类型,为装箱/拆箱指定我自己的例程?对于一个特定的项目,我有一堆我正在重用的类型,并且基本上一遍又一遍地剪切/粘贴我的访问器函数。
例如,C 结构使用 a time_t
,我插入访问器方法来访问/从 a DateTime
。另一个例子是一个逗号分隔的列表,我想去/从一个Array
并自动处理split
/ join
。
有一个更好的方法吗?
编辑:添加示例:
这行得通,我可以以 Perl-ish 方式设置各个字段CStruct
(没有左值,但我可以将它们作为参数传递)。
现在我想在许多结构中的许多字段中使用time_t
,等,并让它们以相同的方式运行。FooType_t
除了一遍又一遍地复制这些方法之外,还有更好的方法吗?
也许宏可以在这里提供帮助?我还没有掌握它们。
arrays - 结构数组作为 Perl 6 NativeCall 结构的属性
我正在尝试封装一个 C 结构,其中一个成员是指向结构的指针数组,但我在弄清楚如何去做时遇到了问题。
假设 C 代码如下所示:
这种代码有效:
但这很可怕。
ACArray
在这里没有用,因为它只是一个指向数组的指针,而不是指针数组;我不能使用类似的东西has A @.a
,因为 arepr('CStruct')
不处理那种属性。
有什么提示吗?