加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C程序如何调用Perl函数?

发布时间:2020-12-16 09:38:49 所属栏目:百科 来源:网络整理
导读:我正在使用call_pv从我的C程序调用perl子例程. 我有两个问题: C程序如何找到定义此子例程的Perl文件?有没有我们可以定义Perl文件名的地方? 如果Perl返回哈希引用作为输出,我如何在C中读取它? 这是我的C函数: static int call_perl_fn(char* image){dSP;
我正在使用call_pv从我的C程序调用perl子例程.
我有两个问题:

> C程序如何找到定义此子例程的Perl文件?有没有我们可以定义Perl文件名的地方?
>如果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);

关于返回值,您应该使用POP来获取SV值,然后使用SvTYPE()检查它以确定类型,并执行相应的处理.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读