我先介绍要从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 进行设置当前的解释器。
分享到:
相关推荐
C/C++面试经典大全,认真看完后,C/C++方面面试、笔试肯定过。
C/C++经典的销售信息管理源码,各个模块都很齐全,框架结构清晰,一看就懂。
Eclipse IDE for Embedded C/C++ Developers(eclipse-embedcpp-2022-06-R-win32-x86_64.zip) 适用于Windows x86_64: An IDE for Embedded C/C++ developers. It includes managed cross build plug-ins (Arm and ...
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
Like other templating systems, the Template Toolkit allows programmers to embed Perl code and custom macros into HTML documents in order to create customized documents on the fly. But unlike the ...
安装python opencv后,导入cv2后出现DLL文件找不到,此时需要将python3.dll文件复制到Anaconda3文件夹下就可以了
HTML-embed代码详解word文档
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
关于嵌入式C语言程序设计的书, 对于嵌入输开发有着重要的作用。
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
This includes dlms/cosem tcp/ip layer implements in embed with c/c++.
Perl扩展包内有(适合64位 linux机器): Perl-libwww Perl-MailTools Perl-MIME-Lite Perl-DBI Perl-XML-Simple Perl-Config-General Perl-HTTP-Server-Simple perl-IO-Socket-SSL RRDtool
embed使用详解,主要是针对在网页中嵌入视频,设置相关的属性值,实现希望的效果
Eclipse IDE for Embedded C/C++ Developers(eclipse-embedcpp-2022-06-R-linux-gtk-x86_64.tar.gz) 适用于Linux x86_64: An IDE for Embedded C/C++ developers. It includes managed cross build plug-ins (Arm...
embed属性详解[文].pdf
离线安装包,亲测可用
embed python打包 和 redis windows使用
离线安装包,亲测可用
使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中[3] 有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的...
解压:tar –zxvf pmon-loongson3.tar.gz –C ~/ 2. 下载交叉编译器 下载地址:http://ftp.loongnix.org/embedd/ls3a/toolchain/gcc-4.4-gnu.tar.gz 解压:sudo tar -zxvf gcc-4.4-gnu.tar.gz -C /opt/ 3. 配置编译...