Embed perl in c/c++, C调用perl, perl调用C 技术详解
来源:互联网 发布:js 计算合计 编辑:程序博客网 时间:2024/05/28 15:36
我先介绍要从perl里面调用C的函数的处理方法 :
请大家下看下面的代码, 其中关键的地方为 void boot_DEP (pTHX_ CV* cv) 函数, 还有 newXS("DEP::bootstrap", boot_DEP, file);
这两个函数代表的意思是: DEP为 perl 调用C的模块名, 也就是说我们还需要写一个 DEP.pm的模块,让其他的perl模块编译的时候不至于编译出错。
newXS 这个函数比较特殊,相当于perl会做一个 key--->Value的映射关系, DEP.pm 里面的bootstrap函数调用会映射为C里面的
boot_DEP函数调用。
函数 xs_init 这个函数是perl内置的回调函数, perl会调用它, 在xs_init函数里面会调用boot_DEP函数, boot_DEP函数里面的
newXS ("DEP::shutdown", xs_shutdown, "COMMON.c"); 相当于什么呢 ?
相当于做了key---->value 的映射关系 , 当perl调用 DEP模块的shutdown时, 就会变为调用C的 xs_shutdown函数。
下面在看看DEP.pm这个模块的代码
下来随便写个 xxx.pl文件, 内容如下, 在C中的xs_shutdown函数中设置个断点, 调试启动,就会看到perl调用到C里面了。
经过本人测试, 有个比较奇怪的地方,就是在 xxx.pl文件的开始的地方 用use DEP; 把sub bar 函数中的 require DEP; 去掉,
会造成 perl无法调用到C的问题, 不知道为什么, 只能像下面这样使用才能调用到C的代码里面。
C调用Perl就比较简单了, 需要注意的是 PERL_SYS_INIT3(argc,argv,env); 很关键。 最好在main函数入口就调用该函数。
还有就是 在 perl_construct 函数之前需要设置 PL_perl_destruct_level 为1, 具体代码如下:
PL_perl_destruct_level = 1;
perl_construct ( poPerlInterpreter );
PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
另外是如果同一个进程内需要多个perl的解释器同时运行的话, 在调用perl解释器处理事务的时候需要对当前的perl解释器进行设置,
用 PERL_SET_CONTEXT 进行设置当前的解释器。
- Embed perl in c/c++, C调用perl, perl调用C 技术详解
- perl调用c语言方法
- perl与c相互调用
- perl, shell, tcl,c 互相调用
- 从C到Perl
- 从C到Perl
- 从C到Perl
- 怎样从Perl中调用C库里的函数
- 用C语言扩展perl
- bash vs perl vs c
- 在C中嵌入perl
- C/C++/Perl/汇编/Java效率比较
- C/C++/Perl/汇编/Java效率比较
- c,c++,java,perl,pytyon语言总结
- C/C++/Perl/汇编/Java效率比较
- 关于求解素数(C/C++,perl)
- Perl + XS 用c/c++方便的编写perl扩展
- 在windows平台下在C语言中调用perl脚本
- 如何求sin(angle),其中angle用角度表示。
- LINQ 中的 select
- 实验09《训练功能的流程控制编程》实验指导书V07-2初稿
- 米...
- 用py2exe编译Python程序
- Embed perl in c/c++, C调用perl, perl调用C 技术详解
- Windows Azure AppFabric 入门教学系列 (五):初探Access Control Service
- 认识人的智慧
- 如何检查确认informix数据库空间离线的原因及解决方案
- 从零开始做3D地图编辑器(六)(基于QT与OGRE)
- 学习笔记
- Oracle9使用oradata恢复数据库
- fckeditor图片预览中的英文如何去掉
- 工作感悟