Вызов подпрограммы perl с параметрами
Мне нужно вызвать процедуру Perl в моей C-программе. Процедура perl принимает следующие аргументы: $a, $b, $c
, где $a
а также $b
целые числа, $c
является строкой (может содержать двоичные символы) Согласно perlcall, вот средства совершения звонка.
I32 call_sv(SV* sv, I32 flags);
I32 call_pv(char *subname, I32 flags);
I32 call_method(char *methname, I32 flags);
I32 call_argv(char *subname, I32 flags, char **argv);
Кажется, я могу использовать только call_argv(...), но есть два вопроса
- как передать целое число в рутину perl
- Как передать (двоичную) строку в Perl?
Жаль, что есть такая функция, как
I32 call_argv(char *subname, I32 flags, int numOfArgs, SV* a, SV* b, SV *c ...);
1 ответ
Смотрите раздел "Параметры передачи" в perlcall. Аргументы помещаются в стек Perl. call_argv
бесполезно для передачи ничего, кроме строк. Соглашение о вызовах будет выглядеть примерно так
PUSHMARK(SP);
mPUSHi(some_integer);
mPUSHp(binary_data, len);
XPUSHs(some_SV_I_had_laying_around);
PUTBACK;
call_pv("sub_name", G_DISCARD);
или вы можете использовать call_sv
если у вас есть имя в SV*
, или же call_method
вызвать метод по имени на некотором объекте.
Если подпрограмма возвращает значение или значения, вы можете вызвать G_SCALAR
или же G_ARRAY
и использовать POP
макросы для доступа к возвращаемым значениям; это подробно описано в следующих двух разделах. Не забудь SPAGAIN
,