Raku:如何为 CArray[WCHAR] 赋值?
Raku: How do I assign values to CArray[WCHAR]?
$乐库-v
这是 Rakudo 版本 2019.07.1,基于 MoarVM 版本 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)»
$乐库-v 这是 Rakudo 版本 2019.07.1,基于 MoarVM 版本 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)»