gpt4 book ai didi

调用带参数的 perl 例程

转载 作者:太空狗 更新时间:2023-10-29 17:09:57 25 4
gpt4 key购买 nike

我需要在我的 C 程序中调用一个 perl 例程。 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 ...);

最佳答案

参见 Passing Parameters section of 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);

或者如果您在 SV* 中有子名称,您可以使用 call_sv,或者使用 call_method 在某个对象上按名称调用方法.

如果 sub 返回一个或多个值,那么您可以使用 G_SCALARG_ARRAY 调用它,并使用 POP 宏来访问返回值值(value)观;以下两节对此进行了详细说明。不要忘记 SPAGAIN

关于调用带参数的 perl 例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23016955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com