gpt4 book ai didi

c - C 程序如何调用 Perl 函数?

转载 作者:太空狗 更新时间:2023-10-29 16:03:39 32 4
gpt4 key购买 nike

我正在使用 call_pv 从我的 C 程序中调用一个 perl 子例程。我有两个问题:

  1. C 程序如何找到这个子程序定义在哪个 Perl 文件中?有什么地方可以定义 Perl 文件名吗?

  2. 如果 Perl 返回一个散列引用作为输出,我如何在 C 中读取它?

这是我的 C 函数:

static int call_perl_fn(char* image)
{

dSP;
int count;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVpv(image, 0))); //parameter to perl subroutine
PUTBACK;
count = call_pv("ImageInfo", G_SCALAR); //Invoking ImageInfo subroutine
SPAGAIN;
if (count != 1)
{
printf("ERROR in call_pv");
}
printf("VALUE:%s", (char*)(SvRV(POPp))); //How to read has reference output?
PUTBACK;
FREETMPS;
LEAVE;

return count;
}

最佳答案

使用 argv[1] 来放置文件名,所以在 perl_run(my_perl_interpreter); 之前做这样的事情:

char *my_argv[] = { "", "NAME_HERE.pl" };
perl_parse(my_perl_interpreter, NULL, 2, my_argv, (char **)NULL);

关于返回值,你应该使用POPs而不是POPp来获取一个SV值,然后检查它来确定类型,用SvTYPE(),并做相应的处理。

看看http://perldoc.perl.org/perlembed.htmlhttp://perldoc.perl.org/perlcall.html

关于c - C 程序如何调用 Perl 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8291311/

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