簡體   English   中英

如何將數組從 perl 傳遞到內聯 C++?

[英]How can I pass an array from perl to inline C++?

我不知道這是一個錯誤還是什么。

以下代碼適用於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 ,我得到錯誤Can't locate auto/main/findAvLen.al in @INC...

我可以讓其他內聯 c++ 代碼工作。 例如,可以像本例中那樣將變量列表傳遞給帶有省略號的內聯代碼,但我想知道為什么 AV* 不起作用,例如,我想使用一個子例程來轉換 perl arrays 傳遞給 C++ 到向量中。 例如void perl2vector(AV* ar, std::vector<T> &v) {...} ,而不是將代碼插入到每個 C++ function 中執行這種轉換,我寫了一個數組參數。 我如何使用該示例的語法將 perl 數組傳遞給這樣的轉換器?


這看起來確實是一個錯誤,但與此同時,uesp 已經找到了解決方法:

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

arr現在等同於上面示例代碼中所需的arrayIn

這似乎與5.10.0中存在的 Perl 錯誤相同,應該在 5.10.29 版本中修復。 如果您運行的是 5.10.0-28,請嘗試更新。 如果您沒有運行這些版本並且仍然收到錯誤,您可以嘗試通過將AV更改為SV來執行此論壇帖子中提到的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM