Проблема ясно указана в сообщении об ошибке: в том виде, в каком вы его объявляете, он ожидает, что каждый элемент будет CArray [WCHAR]. Объявите это таким образом, как указано в документации :
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]:
```perl6
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)»