Tôi không thể biết đây có phải là lỗi hay không.Làm cách nào để chuyển một mảng từ perl sang inline C++?
Các mã sau đây làm việc với Inline::C
nhưng không 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);
}
Máy chạy trên tốt, nhưng thay thế C
với CPP
, và tôi nhận được lỗi Can't locate auto/main/findAvLen.al in @INC...
tôi có thể nhận inline khác C++ mã để làm việc . Ví dụ, có thể chuyển danh sách các biến sang mã nội tuyến bằng dấu chấm lửng như chúng in this example, nhưng tôi tự hỏi tại sao AV * không hoạt động! Ví dụ, tôi sẽ muốn sử dụng một chương trình con để chuyển đổi các mảng perl được chuyển tới C++ thành các vectơ, ví dụ: void perl2vector(AV* ar, std::vector<T> &v) {...}
, thay vì chèn mã để thực hiện chuyển đổi như vậy vào mọi hàm C++ mà tôi viết có tham số mảng. Làm thế nào tôi có thể sử dụng cú pháp của ví dụ đó để chuyển mảng perl đến một trình chuyển đổi như vậy?
này dường như là một lỗi, nhưng trong khi chờ đợi, uesp đã tìm thấy một workaround:
int findAvLen(SV* arrRef) {
AV * arr = MUTABLE_AV(SvRV(arrRef));
return av_len(arr);
}
arr
tại là tương đương với arrayIn
mong muốn trong các mã ví dụ trên.
Hoạt động tốt cho tôi: Perl 5.14.0 i686-linux-thread-đa, Nội tuyến 0,5, Nội tuyến :: CPP 0,38. Nó có vẻ như một lỗi đã được sửa chữa, như uesp nói, mặc dù có vẻ như tất cả những gì bạn phải làm là nâng cấp Inline :: CPP (không phải Perl) lên phiên bản 0.29 hoặc cao hơn. – ikegami
hrmm, tôi đang chạy perl v5.12.3 với Inline :: CPP v0.38. Tôi sẽ cố gắng và cập nhật perl và xem nếu điều đó giúp. – flies
Tôi có một hộp khác với perl v5.12.4 và tôi gặp lỗi tương tự. Đang nói chuyện với sysadmin ... – flies