问题标签 [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 回答
205 浏览

winapi - 将复杂结构传递给 Windows API

我正在尝试GetConsoleScreenBufferInfo(HANDLE, PCONSOLE_SCREEN_BUFFER_INFO)使用 Perl 6 和(当然)NativeCall 的 Windows API 中的函数。

我想我已经正确设置了CONSOLE_SCREEN_BUFFER_INFO函数所需的结构,但是当我尝试转储其内容时,代码在调用后崩溃。

这是演示问题的最短(不完全但接近)方法:

任何有关崩溃发生原因以及如何修复它的提示都非常受欢迎。

0 投票
1 回答
173 浏览

raku - 如何使用 NativeCall 从 Perl 6 正确使用 libXL?

我尝试将 Perl 6(最新版本)中的 libXL 与NativeCall.

我无法让 utf-8 正确保存创建的 xlsx 文件。

只有CArray[uint16]似乎有效, Str 也没有编码('utf8'),也没有CArray[uint8].

最好的结果是保存工作簿、工作表名称和文本;但它们通常以特殊符号结尾。即使设置密钥也“经常”工作。

我的猜测是需要 utf-8 但CArray[uint16]总是给出两个字节,而 utf-8 是一种动态格式。我的猜测也是,我对 libXL.dll 的签名可能是错误的。

我还尝试了适用于 xls 的函数的 A-DLL 版本,但我想获得 xlsx(XML 格式)。

我尝试更改子签名NativeCall并尝试不同格式的给定变量。

  • 有时,什么都没有保存,并且代码从 Perl 6 以非 0 代码结束
  • 有时,文件名以特殊字符结尾(可能取决于编号)
  • A 函数 (ASCII) 确实有效
0 投票
1 回答
171 浏览

c++ - Raku 中 C++ 和 NativeCall 之间的不同输出

我正在尝试为从这里获取的累积分布函数编写一个函数。

这是我的cpp代码:

这是使用 gcc 6.3.0 在 linux 中编译时的输出

我想使用 NativeCall 从 raku 调用相同的代码,所以我修改了代码

测试.cpp

创建动态共享.so库并将 nativecall 代码编写为:

输出是:

为什么相同算法的输出不同,尽管数据容器按照推荐使用。

系统信息:

  • 带有 gcc 6.3.0 的 Ubuntu 18.04 64 位
  • Rakudo 是 2019.07.1 版本。
0 投票
2 回答
173 浏览

raku - 如何为返回整个结构的 C 函数编写 Raku 声明?

我有这个 C 代码:

C 函数返回一个完整的结构,而不仅仅是一个指针,所以我不能将 Raku 声明写为:

有什么建议吗?

0 投票
1 回答
93 浏览

raku - 通过 NativeCall 在 Raku 中使用 void 结构

我正在尝试链接libzip到 Raku,它使用 voidstruct或没有主体的结构,如下所示:

我以同样的方式在我的 Raku 程序中声明它:

这失败了:

我发现该错误的唯一参考是在 MyHTML中的这个未解决的问题中。这可能会使其回归,但我真的不确定。任何的想法?

0 投票
2 回答
155 浏览

docker - 在 Raku 中通过 NativeCall 调用 GSL 函数会引发错误

问题

我试图从 raku调用GSL中 chisq 函数的累积分布函数。

这是我的乐脚本chisq.raku

执行此脚本时,出现以下错误:

通过阅读有关NativeCall的文档,我包括了共享库libgsl.so

谷歌搜索显示cblas_ctrmv可能(不确定)与lapack相关。

所以我搜索了liblapack.so里面确实存在的/usr/libecho $LD_LIBRARY_PATH显示

为了查看是否可以修复它,我添加/usr/libLD_LIBRARY_PATHwith 命令export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib并尝试再次运行该脚本。

仍然无法正常工作,同样的错误信息。

环境:

我正在rstudio 内的 docker 容器中运行代码。

乐版 2019.11

它有gsl-dev文件和gsl库。libgsl.so容器内部有共享库/usr/lib/x86_64-linux-gnu/。此文件夹内的其他共享库是 在此处输入图像描述

有没有办法让它工作?

0 投票
2 回答
196 浏览

raku - Raku/Perl6:如何使用 NativeCall 编写 NULL

https://docs.perl6.org/language/nativecall

https://docs.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-regqueryvalueexw

使用“native”,如何满足“NULL”要求?

“int32”返回:

非常感谢,-T

0 投票
1 回答
95 浏览

raku - Raku:如何为 CArray[WCHAR] 赋值?

$ raku -v 这是基于 MoarVM 版本 2019.07.1 构建的 Rakudo 版本 2019.07.1

以下是在 Raku REPL 上完成的。我在这里做错了什么?如何为 CArray[WCHAR] 赋值?

我希望 $lpData[0] 为 0xABCD,$lpData[1] 为 0xEF12。

非常感谢,-T

0 投票
1 回答
115 浏览

raku - 如何在使用 NativeCall 的 Raku 发行版中捆绑 C 源代码?

我正在为 C 库编写 Raku 绑定,但我不想要求 Raku 代码的用户自己安装 C 库,我想将 C 代码捆绑为分发的一部分(它不是那么广泛分布式库)。

我读过有关发行版的信息%?RESOURCES,这似乎很有用。但我对如何应用它的具体细节很模糊。

我可以在发行版中捆绑 C 源代码,并指定某种方式将其编译为安装的一部分(例如 with zef)吗?还是我需要捆绑库的预编译版本,并让代码根据平台选择正确的版本?

或者这根本不可能,我应该只向用户说明如何单独安装库?

0 投票
0 回答
29 浏览

raku - cglobal() 与“my”或“our”变量一起使用时表现不同

我发现了一些我无法解释的东西,所以我把它打到了我认为的最低限度:

为什么声明为的变量my似乎our包含不同类型的数据?
文档中没有暗示这种行为,这对我来说是出乎意料的。