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

raku - 在 Perl 6 中声明“本机”类型

natives.pm6module中,许多原生类型都是这样声明的:

你显然可以以同样的方式使用它,

显然,您需要native指定一个表示,因为如果native不使用它将失败。与 相同is repr,因此它们齐头并进。然而,这只是一种行为观察。

native但是,除了实现中的那些示例之外,我还没有找到任何关于何时何地使用的文档。任何帮助将不胜感激。

0 投票
0 回答
331 浏览

windows-10 - 在 Windows 10 上将 Perl 6 安装到 MSYS2

我想使用 Perl 6 及其 NativeCall 库在 Windows 10 上开发 GTK+3 应用程序。我已经在上面安装了 MSYS2 和 GTK+3,并且可以使用它运行一个示例 GTK+3 C 程序。但我无法在 MSYS2 上安装 Perl 6。我试图在网上搜索相关的博客或帖子,但找不到任何解决方案。如何在 MSYS2 上安装 Perl 6 (Rakudo)?

0 投票
1 回答
114 浏览

utf-16 - Perl6 NativeCall with Str iscoded('utf16') 得到随机损坏的结果

我正在GetFullPathName使用 perl6 脚本映射 Windows API NativeCall,因此我编写了以下内容:

代码是随机工作的,直到我附加一个"\0"after $path

[编辑] 多次调用的结果:

[12] => D:\dev\pa.t

[12] => D:\dev\pa。

[12] => D:\dev\pa.槟

[9] => D:\dev\pa

[9] => D:\dev\pa

还有另一种正确的方法吗?

0 投票
1 回答
157 浏览

visual-studio - Perl6 NativeCall 在本机库中找不到符号

我有一个使用 NativeCall 的模块,它适用于 Linux 和 macOS,但不适用于 Windows。当我尝试在 Windows 上使用该模块时,出现很多错误,例如:

我将 cmake 用于我对所有三个操作系统的 C++ 依赖项。在 Linux 和 macOS 上我可以cmake ..; make; sudo make install,在 Windows 上我cmake -G "Visual Studio 15 2017 Win64" ..然后在 Visual Studio 中打开创建的“.sln”进行编译。构建成功,在所有三个操作系统上都没有错误。

有没有人知道我需要做什么/改变才能让我的模块在 Windows 上工作?

完整模块位于此处:https ://github.com/ryn1x/Graphics-TinyTIFF

0 投票
1 回答
174 浏览

raku - 大型 Perl6 CArray 上的高性能数学运算?

我有一些由本机子返回的大型 CArray,我需要对其执行基本的元素数学运算。CArray 通常是 10^6 个元素的数量级。我发现对它们调用 .list 以将它们视为普通的 Perl6 类型非常昂贵。有没有办法在保持 CArrays 的同时对它们进行高性能的元素操作?

简短的测试脚本来计时我尝试过的一些方法:

输出:

for 循环方法似乎最快,但 CArray 的处理时间仍然比 List 长 6 倍。

有任何想法吗?

0 投票
2 回答
211 浏览

raku - 使用 NativeCall 将 C 库函数合并到 Perl6

我正在尝试在 Perl6中使用lgammaC 语言。math.h

如何将其合并到 Perl6 中?

我努力了

这适用于第一个数字 (a Str),但对于第二个数字 ( ) 失败$x,给出错误:

我想非常简单地做到这一点,就像在 Perl5 中一样:use POSIX 'lgamma';然后lgamma($x)但我不知道如何在 Perl6 中做到这一点。

0 投票
1 回答
84 浏览

c - 如何使用 NativeCall 缓解 Rakudo 中的错误?

我希望能够在具有 REPR CStruct/CPointer 的类中使用双指针:

Perl 6 代码:

短高尔夫:

只是由于Rakudo中的错误,我无法弄清楚该怎么做。有没有更好的方法可以处理代码的 C 部分中的错误(这就是我这样写它的原因)?

0 投票
1 回答
214 浏览

shared-libraries - perl6 NativeCall 在 Darwin 上找不到库

我正在使用 NativeCall 来熟悉 Perl6 的那一面。当然,我正在尝试首先加载 libstatgrab(还有什么?)。

所以我从最简单的部分开始——主机信息。由于还没有集群支持,这只是一个结果 - 不用担心复杂性。

编码:

启动它(哑)会导致加载库错误:

好的 - 给它一些搜索路径:

使用时相同的图片DYLD_LIBRARY_PATH- Darwin 上的 dlopen(3) 也支持。

但是在目录中更改有效:

调用 moarvm 的方式是否缺少搜索路径直通?

0 投票
1 回答
93 浏览

raku - NativeCall 中的位域

我正在尝试为 Cgraph 创建 Perl6 绑定,其中一个结构为其某些属性设置了位字段,其值低于 8。我应该如何在我的模块中表示它?

我尝试使用is nativesize(x)trait 定义自定义类型,但 CStructs 仅支持 8 位宽的倍数的类型。

C 示例代码:

我尝试了什么:

尝试将我的模块与该代码一起使用失败并显示以下错误消息: CStruct only supports native types that are a multiple of 8 bits wide (was passed: 2)

0 投票
1 回答
178 浏览

windows - NativeCall 在 Kernel32.dll 中找不到函数

我正在尝试将此代码移植到 Perl6。虽然我可以调用GetStdHandleGetConsoleMode并且SetConsoleMode,当我尝试调用时,我的脚本会中断ReadConsoleInput

现在,该功能肯定存在。虽然它有一个复杂的签名,但我不确定我的脚本是否正确。这可能是原因吗?NativeCall 会看签名吗?

这就是我在代码中定义子的方式(评论来自 MS 文档)

如果需要,我可以发布其余的代码,但由于我必须定义所有结构和东西,而且通常来自头文件,所以它是很多样板文件。