gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:44:40 26 4
gpt4 key购买 nike

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

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

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

> use NativeCall;
Nil

> constant WCHAR := uint16;
(uint16)

> my $ValueData = 0xABCDEF12;
2882400018

> my CArray[WCHAR] $lpData;
(CArray[uint16])

> $lpData[ 0 ] = ( $ValueData +& 0xFFFF0000 ) +> 0x10;
Type check failed in assignment to $lpData; expected NativeCall::Types::CArray[uint16] but got Array ($[])
in block <unit> at <unknown file> line 1

> $lpData[ 1 ] = $ValueData +& 0x0000FFFF;
Type check failed in assignment to $lpData; expected NativeCall::Types::CArray[uint16] but got Array ($[])
in block <unit> at <unknown file> line 1

非常感谢,
-T

最佳答案

错误消息中清楚地说明了问题:在您声明它的方式中,它期望每个项目都是 CArray[WCHAR]。以这种方式声明,如 the documentation 中所示:

use NativeCall;
constant WCHAR = uint16; # No need to bind here also
my $native-array = CArray[WCHAR].new();
$native-array[0] = 0xABCDEF12 +& 0x0000FFFF;
say $native-array.list; # OUTPUT: «(-4334)␤»
CArray不完全是 Positional ,但它确实有 AT-POS定义,以便您可以使用方括号来分配值。当您尝试分配给未初始化的 Scalar 时会出现错误(其中包含任何)就好像它是一个数组。程序的最小变化只是初始化为 CArray[WCHAR]:
use NativeCall;
constant WCHAR = uint16; # No need to bind here also
my CArray[WCHAR] $native-array .= new;
$native-array[0] = 0xABCDEF12 +& 0x0000FFFF;
say $native-array.list; # OUTPUT: «(-4334)␤»

关于Raku:如何为 CArray[WCHAR] 赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59622946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com