我试图使用Nativecall与一些C函数进行交互。将指针传递给Perl 6 Nativecall
对于一种情况,我需要传入由 函数更新的指针,所以它需要一个指向'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];
}
}
它正常工作,是这样的。它看起来像“是rw”应该强制指向指针,它应该以第一种方式工作。
我在做什么错?
这对我的作品。我刚刚停止使用指针,并使用size_t和'是RW'工作正常。 –