Я хотел бы использовать функцию ncurses int addwstr(const wchar_t *wstr);
в Perl6.
Как я могу получить подписи Perl 6, которые передают const wchar_t *wstr
из addwstr
?
use v6;
use NativeCall;
constant LIB = 'libncursesw.so.5';
sub addwstr( ? ) returns int32 is native(LIB) is export {*};
Str is encoded('utf32')
в Linux. - person ElderBug   schedule 04.03.2016wchar_t
в Linux - это UTF-32. Может быть, это сработает с'UTF-32'
? - person ElderBug   schedule 04.03.2016NativeCall.pm6
похоже, что кодировка utf32 не распознается собственным механизмом вызова. - person sid_com   schedule 04.03.2016addstr
вместоaddwstr
сStr is encoded('utf8')
? Или, может быть, вы могли бы преобразовать себя в UTF-32 в Perl, а затем перейти кaddwstr
как массивуint32
. - person ElderBug   schedule 04.03.2016Str is encoded('utf8')
я все еще не получаю правильный вывод, и когда я пытаюсь сделать это с массивом, я получаю сообщение об ошибке:This representation (CArray) cannot unbox to a native string
- person sid_com   schedule 04.03.2016addstr
с utf8? Я думаю, вам нужно связатьlibncurses
вместоlibncursesw
. Что касается массива, как он узнает, что натив ожидает строку? Вы где-то ставили подпись? Я не думаю, что он может прочитать это из «.so». Вы должны предоставить более подробную информацию (возможно, кто-то другой мог бы помочь вам быстрее, но что касается меня, мне нужны подробности). Кроме того, добавьте попытки, которые вы предприняли в вопросе (проще мне и другим, кто может помочь). - person ElderBug   schedule 04.03.2016sub addwstr( CArray[int32] )
? Кроме того, если вы сделали преобразование самостоятельно, убедитесь, что в конце массива есть терминал 0 (idk, если Perl уже сделал это для своих строк). - person ElderBug   schedule 04.03.2016