Nie mogę stwierdzić, czy to błąd, czy co.Jak mogę przekazać tablicę z perla do wbudowanego C++?
Poniższy kod działa z Inline::C
ale nie 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);
}
Powyższe działa dobrze, ale zastąpić C
z CPP
, i pojawia się błąd Can't locate auto/main/findAvLen.al in @INC...
mogę dostać drugą inline kodu C++ do pracy . Możliwe jest na przykład przekazanie listy zmiennych do kodu śródliniowego z wielokropkiem, tak jak robią to in this example, ale zastanawiam się, dlaczego AV * nie działa! Na przykład, będę chciał użyć podprogramu do konwersji tablic perlowych przekazywanych do C++ na wektory, np. void perl2vector(AV* ar, std::vector<T> &v) {...}
, zamiast wstawiania kodu do wykonania takiej konwersji do każdej napisanej przeze mnie funkcji w C++, która pobiera argument tablicowy. Jak mogę użyć tej przykładowej składni do przekazania tablicy perl do takiego konwertera?
To wydaje się być błąd, ale w międzyczasie uesp znalazł obejście:
int findAvLen(SV* arrRef) {
AV * arr = MUTABLE_AV(SvRV(arrRef));
return av_len(arr);
}
arr
jest równoważna arrayIn
pożądanym w kodzie przykładzie powyżej.
Działa dobrze dla mnie: Perl 5.14.0 i686-linux-thread-multi, Inline 0.5, Inline :: CPP 0.38. Wygląda na naprawiony błąd, jak powiedział Uesp, chociaż wydaje się, że wszystko, co musisz zrobić, to zaktualizować Inline :: CPP (nie Perl) do wersji 0.29 lub wyższej. – ikegami
hrmm, używam perl v5.12.3 z Inline :: CPP v0.38. Spróbuję zaktualizować perl i zobaczę, czy to pomaga. – flies
Mam inne pudełko z perl v5.12.4 i mam ten sam błąd. Rozmawiam z sysadminem ... – flies