【发布时间】:2017-04-21 12:52:02
【问题描述】:
我正在尝试使用 NativeCall 与一些 C 函数进行交互。
对于一种情况,我需要传入由 函数,所以它需要一个指向指针'void **'的指针。
我试过这样:
class Foo
{
has Pointer $.first;
has Pointer $.last;
sub somefunc(Pointer is rw, Pointer is rw, Str) is native { * }
method myfunc(Str $arg) {
somefunc($!first, $!last, $arg);
}
}
它不起作用。指针不会被函数更新。
由于 C 数组基本上是指向指针的指针,我可以伪造它 像这样:
class Foo
{
has Pointer $.first;
has Pointer $.last;
sub somefunc(CArray[Pointer], CArray[Pointer], Str) is native { * }
method myfunc(Str $arg) {
my $first = CArray[Pointer].new($!first);
my $last = CArray[Pointer].new($!last);
somefunc($first, $last, $arg);
$!first = $first[0];
$!last = $last[0];
}
}
它像这样工作得很好。似乎“is rw”应该强制 指向指针的指针,它应该以第一种方式工作。
我做错了什么?
【问题讨论】:
标签: raku nativecall