Tôi là một người mới bắt đầu sử dụng XS và tôi đang tìm cách thay đổi mô-đun XS hiện có sử dụng thư viện C cũ hơn 15 năm. thư viện này). Vấn đề là tôi muốn để có thể sử dụng PerlIO chuỗi lừa đảo như:Làm cho một thư viện cũ hoạt động với Perl XS và PerlIO
open($fh, '<', \$string);
và sau đó vượt qua $fh
để keo XS nơi thư viện được mong đợi FILE
. Vấn đề là các XS có:
int
_parse (entry_ref, filename, file, preserve=FALSE)
SV * entry_ref;
char * filename;
FILE * file;
boolean preserve;
và tôi cho rằng nó cần phải được:
PerlIO * file;
này không làm việc tất nhiên là phải có nhiều điều hơn thế. Khi tôi nhìn vào _parse
mã trong thư viện, nó kết thúc trong:
AST * bt_parse_entry (FILE * infile,
char * filename,
btshort options,
boolean * status)
{
AST * entry_ast = NULL;
static int * err_counts = NULL;
static FILE * prev_file = NULL;
với FILE
loại một lần nữa. Bây giờ câu hỏi cơ bản tôi phải bắt đầu là - điều này thậm chí có thể được mà không thay đổi thư viện; có nghĩa là, tôi có thể nhận được pseudo-filehandle từ chuỗi hành vi PerlIO chỉ bằng cách thay đổi XS?