加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何将数组从perl传递给内联C?

发布时间:2020-12-15 23:37:09 所属栏目:大数据 来源:网络整理
导读:我不知道这是一个错误还是什么. 以下代码适用于Inline :: C,但不适用于Inline :: CPP #!/usr/bin/perluse warnings;use Inline C;my @array = (1..10);print findAvLen(@array),"n";__END____C__int findAvLen(AV* arrayIn) { return av_len(arrayIn);} 以
我不知道这是一个错误还是什么.

以下代码适用于Inline :: C,但不适用于Inline :: CPP

#!/usr/bin/perl
use warnings;
use Inline C;

my @array = (1..10);
print findAvLen(@array),"n";

__END__
__C__

int findAvLen(AV* arrayIn) {
    return av_len(arrayIn);
}

以上运行正常,但用CPP替换C,我得到错误无法在@INC中找到auto / main / findAvLen.al …

我可以使用其他内联c代码.例如,有可能将变量列表传递给带有省略号的内联代码,因为它们执行in this example,但我想知道为什么AV *不起作用!例如,我想使用子程序将传递给C的perl数组转换成向量,例如void perl2vector(AV * ar,std :: vector< T>& v){…},而不是插入代码来执行这样的转换到我写的每个接受数组参数的C函数.我如何使用该示例的语法将perl数组传递给这样的转换器?

这似乎是一个错误,但与此同时,uesp找到了一个解决方法:

int findAvLen(SV* arrRef) { 
    AV * arr = MUTABLE_AV(SvRV(arrRef));
    return av_len(arr);
}

arr现在等效于上面示例代码中所需的arrayIn.

解决方法

这似乎与存在于5.10.0中的 this Perl bug相同,并且应该在5.10.29版本中得到修复.如果您正在运行5.10.0-28尝试更新.如果您没有运行这些版本并仍然出现错误,您可以尝试通过将AV更改为SV来执行 this forum post中提到的操作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读