问题标签 [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 - Raku 如何将指向 Buf 的指针传递给本地写入调用
我正在尝试从 包装read
函数unistd.h
,但无法使其正常工作。这是我所拥有的:(在文件中read.raku
:)
我从命令行(bash)这样测试它:
但我得到:
所以看起来从 FD 3 读取的字节没有写入Buf
.
我也试过这个:
但是我遇到了分段错误,我猜是由于使用$pbuf[^5]
. 但即使只是$pbuf.deref
不给出读取的第一个字节。
所以我一定是做错了什么或者完全误解了如何使用本地调用。
更新:在玩了更多之后,看起来上面第二个片段的问题在于is rw
位。这似乎有效:
raku - 如何将 CArray[of-struct] 从 Raku 传递给 C?
我该如何进行这项工作?
更新:在搜索了包含 Raku 规范测试的 Github 之后,在这里,我没有找到任何传递 CArray[of-structs] 的示例。 这里有 Christoph 2017 年发表的一篇文章,其中给出了“解决方法”。
Christoph 的解决方案可能有效,但在 NativeCall 中会更好,如果没有更好的办法的话。
在 Github 上有一个使用 a 的 Rakudo 测试,int TakeAStructArray(Struct **structs)
如果您可以编写一个 C 函数将其 args 重新打包以转发到 a ,这可能会有所帮助TakeAnArrayOfStruct( struct Struct[])
。
下面,JJMerelo 对我的怀疑是由于 Rakudo 中的错误而失败。
我有一个C函数,它使用类似于 NativeCall 文档中使用的 timespec 结构:
结构 TS {
int show2( struct TS ts[2] ) { printf("show2: (1) %ld %ld (2) %ld %ld\n", ts[0].ot, ts[0].one, ts[ 1].ot, ts[1].one); 返回0;从C调用时效果很好。
从 Raku (moar) 调用不起作用:
没有错误,结果如下:
类似的功能int show2long( long i[2] )
和int showTS(int show1( struct TS *ts )
工作。
raku - Raku NativeCall 到 LibX11 屏幕和显示
Fedora 33 Raku
我正在尝试使用 Raku 的 NativeCall 与 libX11.so 对话以打印出我的屏幕和显示器:
问题。我缺少关于类语法的一些内容,因为它向我显示了一个指针地址而不是我的显示,我认为它是“:0”。我也认为类声明应该在某处显示一个字符串。
raku - nativecast() 是否创建一个新容器?
我正在编写一个 C 库的接口。AC 函数分配一些内存,读取一个值,并返回一个void *
指向该缓冲区的指针,随后将被释放。
我希望确定当我将调用的输出分配给nativecast(Str, $data)
Raku Str 变量时,数据被分配给变量(复制到),而不仅仅是绑定到它,所以我可以释放 C 函数分配的空间任务后不久。
这大概是代码的样子:
我通过 valgrind 运行此代码,它没有报告任何引用已释放内存缓冲区的尝试。我还是很好奇。
c - 使用 NativeCall 调用 C fn `erf` 得到比 C 中的 `erf` 更精确的输出
我写了一个Raku
脚本来调用标准库erf
中的函数:C
此脚本的输出
与除 之外C
的所有值的输出匹配。[0.5,1,2,3,4,-0.9]
4
对于输出while给出. 4
_C
1.000000
Raku
0.9999999845827421
要测试 in 的输出4
,请C
运行以下代码:
知道发生了什么吗?我也需要1.0
从 Raku 输出。