首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NativeCall。如何将字符串作为C函数的参数

NativeCall。如何将字符串作为C函数的参数
EN

Stack Overflow用户
提问于 2017-09-24 14:50:38
回答 3查看 163关注 0票数 3

有一个C函数,它将一些字符串返回给提供的指针:

代码语言:javascript
复制
void    snmp_error(netsnmp_session *sess, int *clib_errorno,
                       int *snmp_errorno, char **errstring);

Perl6版本是:

代码语言:javascript
复制
sub snmp_error(Snmp-session, int32 is rw, int32 is rw, Str is rw) is native("netsnmp") { * };

snmp_error($sess, my int32 $errno, my int32 $liberr, my Str $errstr);
say $errno, " ", $liberr, " ", $errstr;

它返回正确的It,但不返回字符串:

0 -3 (Str)

只是个窃听器还是出了什么问题?

代码语言:javascript
复制
perl6 -v
This is Rakudo version 2016.12 built on MoarVM version 2016.12
implementing Perl 6.c.

也是一样的

代码语言:javascript
复制
This is Rakudo version 2017.09 built on MoarVM version 2017.09.1
implementing Perl 6.c.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-26 08:32:45

当我努力解决同样的问题时,我翻译成这样:

代码语言:javascript
复制
gboolean notify_get_server_info (char **ret_name,
                                 char **ret_vendor,
                                 char **ret_version,
                                 char **ret_spec_version);

这方面:

代码语言:javascript
复制
sub notify_get_server_info(Pointer[Str] $name is rw,
                           Pointer[Str] $vendor is rw,
                           Pointer[Str] $version is rw,
                           Pointer[Str] $spec_version is rw --> int32)
                           is native(LIB) { * }

这对我有用。

票数 2
EN

Stack Overflow用户

发布于 2017-09-24 19:42:41

我认为这是一个bug (或者更有可能只是还没有完全实现)。

关于一些工作,请参阅这里的答案:Passing pointer to pointer in Perl 6 Nativecall

票数 0
EN

Stack Overflow用户

发布于 2017-09-26 09:17:41

费尔南多·桑塔加塔的方法发挥了预期的作用:

代码语言:javascript
复制
sub snmp_error(Snmp-session, int32 is rw, int32 is rw, Pointer[Str] is rw) is native("netsnmp") { * };

my $e = Pointer[Str].new;
snmp_error($sess, my int32 $errno, my int32 $liberr, $e);
say "syserr=$errno liberr=$liberr error=", $e.deref;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46391319

复制
相关文章

相似问题

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