- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何让python调用C和C代码
如何让python调用C和C++代码
安装python后,会有一个chm格式的python手册。要搞明白如何让python调用C/C++代码(也就是写python的 extension),你需要征服手册中的Extending embedding厚厚的一章。在昨天花了一个小时看地头晕脑胀,仍然不知道如何写python的extension后,查阅了一些其他 书籍,最终在Python Programming On Win32书中找到了教程。下面记录一下如何在visual studio 2005中,写一段C/C++的MessageBox代码,然后提供后python调用,最后的结果当然是显示一个MessageBox.1. 首先要明白的是,所谓的python扩展(也就是你提供给python的c/c++代码,不一定是c/c++代码,可以是其他语言写的代码)是一个 dll,并且这个dll放在本机python安装目录下的DLLs目录下(譬如我机器上的路径是:F:\Program Files\Python25\DLLs),假如我们接下来要写的扩展module名为mb,python调用的代码为:import mbmb.showMsg(Pythons really amazing, I kindda love it!)python怎么找到我们的mb模块呢?就是上面说的,我们要生成一个mb.dll,然后拷贝到Dlls目录下面,为了区别普通的dll和python专用扩展的dll,我们的 mb.dll修改成mb.pyd(python dll)2. 搭建环境,我们要使用python提供的c头文件和lib库来进行扩展的开发。在vs 2005下点击菜单 工具-选项, 打开选项对话框,选择项目和解决方案-VC++目录, 然后在右边显示以下内容的目录得comboBox上选择包含文件”,添加python的include目录(我的机器上是F:\Program Files\Python25\include),然后选择库文件,添加python的libs目录(我的机器上是F:\Program Files\Python25\libs)。既然扩展是一个dll,接下来我们要建立一个“动态链接库”工程,然后开始写代码:#include python.h //python.h是包含python一些定义的头文件,在python的include目录下/*我的python版本是2.5, 因为安装python后它没提供debug下的lib库文件,因此你必须生成release版的dll,想要生成dll版本的,你要到python官网上自己去下载python源代码,当然你可以继续生成release版本的dll,但dll中包含调试信息*/#pragma comment(lib, python25.lib) //先不管static PyObject* mb_showMsg(PyObject* self, PyObject *args);/*如果你的扩展是mb,那么必须实现一个initmb函数,并且从dll中导出这个函数,但我们在python中调用import mb时,python会去dll里去调用initmb函数,这个函数告诉python我们有些什么函数,该怎么告诉python我们有一个showMsg函数呢?下面详解*///必须extern C下,这样不会在C++编译器里不会更改掉导出的函数名字,我第一次就犯了这样的错误extern C __declspec(dllexport) void initmb(){/*当调用mb.showMsg(Pythons really amazing, I kindda love it!)时, 相当于你告诉python我有一个showMsg函数,我们怎么告诉python去调用我们dll里的mb_showMsg函数呢?技巧就是下面的方式, 定义一个字典数据结构,key = showMsg, value =mb_showMsg,METH_VARARGS是函数调用方式,仔细查手册吧*/static PyMethodDef mbMethods[] = {{showMsg, mb_showMsg, METH_VARARGS},{NULL, NULL, NULL} /*sentinel,哨兵,用来标识结束*/};//告诉python我们的模块名叫mb, 模块包含的函数都在mbMethods字典里PyObject *m = Py_InitModule(mb, mbMethods);}/*接下来实现核心功能showMsg*///第一个self参数我们用不着,具体查手册,第二
您可能关注的文档
最近下载
- TXEEPIA 001-2023 重点行业企业项目碳排放评价技术规范.pdf VIP
- 2025年人教版三年级上册道德与法治全册知识点(新教材).pdf
- 海燕出版社六年度级劳动与技术上册教案.pdf VIP
- TCWEC29-2021水利水电工程清污机制造安装及验收规范(OCR).pdf VIP
- 第8课《回忆鲁迅先生》课件 (共45张ppt) 2025-2026学年统编版语文八年级上册.pptx VIP
- 初中美术折纸教学课件.ppt VIP
- 爱护公物,从我做起 主题班会课件(共30张PPT).pptx VIP
- 第二单元 单元复习课件七年级语文上册.ppt VIP
- 2025年广东高职高考语文试卷及答案.doc VIP
- 小马宝莉英文第四季台词S04E18 Maud Pie.pdf VIP
原创力文档


文档评论(0)