首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Perl 6 NativeCall中传递指针到指针

在Perl 6 NativeCall中传递指针到指针
EN

Stack Overflow用户
提问于 2017-04-21 12:52:02
回答 1查看 370关注 0票数 5

我试图使用NativeCall与一些C函数进行交互。

在一种情况下,我需要传入由函数更新的指针,因此它需要指向指针'void **‘的指针。

我试过这样做:

代码语言:javascript
复制
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数组基本上是指向指针的指针,所以我可以这样做:

代码语言:javascript
复制
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“应该强制指针指向指针,并且它应该以第一种方式工作。

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2017-09-26 09:26:23

在2017.09版中,这个方法适用于我:

代码语言:javascript
复制
class Pdu is repr('CStruct') { ... }

sub snmp_synch_response(Snmp-session, Pdu, Pointer[Pdu] is rw) returns int32 is native("netsnmp") { * };

my $p = Pointer[Pdu].new;
my $status = snmp_synch_response($ss, $pdu, $p);
say $status, "-", $p;

my $resp = $p.deref;
say $resp;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43543217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档