6

我不知道这是一个错误还是什么。

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

以上运行正常,但替换CCPP,我得到错误Can't locate auto/main/findAvLen.al in @INC...

我可以让其他内联 C++ 代码工作。例如,可以像在本例中那样使用省略号将变量列表传递给内联代码,但我想知道为什么 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上面示例代码中的期望。

4

1 回答 1

4

这似乎与5.10.0 中存在的这个 Perl 错误相同,应该在 5.10.29 版本中修复。如果您运行的是 5.10.0-28,请尝试更新。如果您没有运行这些版本并且仍然收到错误消息,您可以尝试执行本论坛帖子中提到的操作,方法是AVSV.

于 2012-04-04T18:00:32.883 回答