如何将数组从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中提到的操作.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |