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

时间:2012-04-04 17:24:27

标签: c++ perl inline

我无法判断这是一个错误还是什么。

以下代码适用于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);
}

以上运行正常,但将C替换为CPP,我收到错误Can't locate auto/main/findAvLen.al in @INC...

我可以使用其他内联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

1 个答案:

答案 0 :(得分:4)

这似乎与5.10.0中存在的this Perl bug相同,并且应该在5.10.29版本中修复。如果您正在运行5.10.0-28尝试更新。如果您没有运行这些版本但仍然收到错误,则可以尝试将AV更改为SV来执行this forum post中提到的内容。