这次讲讲,如何扩展c++库。通过boost.python把c++库编译成python能够调用的dll。

通过上一次的教程后,大家都应该会使用boost.python了。把c++程序编译成pyd文件。由于c++有很多特性,所以,如果你的程

序用了很多的c++特性的话,那么你必须做很多工作了。像虚拟函数,函数重载,继承,默认值等等。具体如何转化,请参

boost.python的文档了。

这几天尝试着把c++程序库编译成python可调用的dll,不知道为什么一直不可用。。很是郁闷。老是显示如下的错误:

Traceback (most recent call last):

File "", line 1, in

import pydll

ImportError: No module named pydll

意思是说找不到dll。我把dll都copy到python/dlls下了还是不行,而且我确定python的sys.path包含了python/dlls目录了。

很是不解。网上也很难找到资料,google了很长时间找不到有用的资料,好像中文方面的资料很少的。今天尝试了一下google

英文资料,终于有了新的发现:

http://mail.python.org/pipermail/c++-sig/2007-February/011971.html

You are using Python2.5. In this version of Python you have to have

file extension

to be "pyd" - sge.pyd

--

Roman Yakovenko

C++ Python language binding

http://www.language-binding.net/

有人碰到的问题跟我的是一样的。后面那个Roman回答了一下,是文件扩展名的问题!!!为什么不支持dll呢?不解。回去试

了一下把后缀名改了就成功了。。。why???

这是一个非常简单的dll工程。给python提供了一个函数static PyObject* Recognise(PyObject *self, PyObject *args)。

1、不使用boost.python库来直接构建dll

接下来,我们来用C++为Python编写扩展模块(动态链接库),并在Python程序中调用C++开发的扩展功能函数。生成一个取名为

pyUtil的Win32 DLL工程,除了pyUtil.cpp文件以外,从工程中移除所有其它文件,并填入如下的代码:

// pyUtil.cpp

#ifdef PYUTIL_EXPORTS

#define PYUTIL_API __declspec(dllexport)

#else

#define PYUTIL_API __declspec(dllimport)

#endif

#include

#include

#include

BOOL APIENTRY DllMain( HANDLE hModule,

DWORD ul_reason_for_call,

LPVOID lpReserved

)

{

switch (ul_reason_for_call)

{

case DLL_PROCESS_ATTACH:

case DLL_THREAD_ATTACH:

case DLL_THREAD_DETACH:

case DLL_PROCESS_DETACH:

break;

}

return TRUE;

}

std::string Recognise_Img(const std::string url)

{

//返回结果

return "从dll中返回的数据... : " +url;

}

static PyObject* Recognise(PyObject *self, PyObject *args)

{

const char *url;

std::string sts;

if (!PyArg_ParseTuple(args, "s", &url))

return NULL;

sts = Recognise_Img(url);

return Py_BuildValue("s", sts.c_str() );

}

static PyMethodDef AllMyMethods[] = {

{"Recognise", Recognise, METH_VARARGS},//暴露给Python的函数

{NULL, NULL} /* Sentinel */

};

extern "C" PYUTIL_API void initpyUtil()

{

PyObject *m, *d;

m = Py_InitModule("pyUtil", AllMyMethods); //初始化本模块,并暴露函数

d = PyModule_GetDict(m);

}

在Python代码中调用这个动态链接库: (记得把dll的扩展名改为.pyd,另外dll的路径要能够被检索到)

import pyUtil

result = pyUtil.Recognise("input url of specific data")

print "the result is: "+ result

2、使用boost.python库来构建dll

用C++为Python写扩展时,如果您愿意使用Boost.Python库的话,开发过程会变得更开心J,要编写一个与上述pyUtil同样功能

的动态链接库,只需把文件内容替换为下面的代码。当然,编译需要boost_python.lib支持,运行需要boost_python.dll支持

#include

#include

using namespace boost::python;

#pragma comment(lib, "boost_python.lib")

std::string strtmp;

char const* Recognise(const char* url)

{

strtmp ="从dll中返回的数据... : ";

strtmp+=url;

return strtmp.c_str();

}

BOOST_PYTHON_MODULE(pyUtil)

{

def("Recognise", Recognise);

}

可以非常明显地看到,用了boost.python库之后,简单了很多。因为boost.python为你做了很多的事情。。恩。

好像没有讲很多有用的东西,光顾着讲了,呵呵。。。我也还在继续学习之中。下次写点什么呢?继续学习了哦

python和c学习-python与c++交互学习入门之5相关推荐

  1. 【渐进交互学习网络:轻量级:超分:工业应用】

    Progressive Interaction-Learning Network for Lightweight Single-Image Super-Resolution in Industrial ...

  2. 为什么学习Python数据分析

    为什么学习Python数据分析?这是很多人都比较关注的一个问题,Python编程语言近几年在互联网行业是非常火爆的,尤其是在人工智能这一领域,它会大大的提高我们的工作效率等等,具体来看看下面的详细介绍 ...

  3. 为什么要学习Python编程语言?哪些人适合学习Python?

    先回答第一个被初学编程的朋友问到最多的问题,为什么要学习Python编程语言? 答:现在信息更新的非常快速,又迎来了大数据的时代, 各行各业如果不与时俱进,都将面临优胜劣汰,知识是不断的更新的,只有一 ...

  4. 零基础入门学习Python,我与python的第一次亲密接触后的感受!

    前言:Python是适合初学者入门最好的语言 Python适合初学者入门最好的语言 人工智能用Python?高考要加入Python?现在连微软官方Excel都要把Python作为官方语言!Python ...

  5. 零基础的你还在纠结怎么学习Python编程吗?

    想入门学IT,但不知道从哪门编程语言开始学起的同学有很多,小编建议,在编程语言的选择方面,如果你有自己感兴趣的方向,那么就最好选择自己的兴趣,毕竟有兴趣才能有耐心学习. 如果你是零基础,又暂时没有明确 ...

  6. python多久能上手_小白学习Python,怎样能够快速入门上手

    原标题:小白学习Python,怎样能够快速入门上手 时至今日,Python已经成为最受欢迎的编程语言之一,清晰易读,适用广泛.在TIOBE 排行榜中位居第四,成为名副其实的人工智能第一语言. 那么零基 ...

  7. 学习python需要什么基础-要学Python编程,需要什么样的基础呢?想找这方面工作...

    原标题:要学Python编程,需要什么样的基础呢?想找这方面工作 作为一个初学Python的新手,如何学好这门语言,肯定经常是一头雾水. 那么,学好这门编程语言的基础是什么呢? 第一步,就是马上到网站 ...

  8. 没学过编程可以自学python吗-完全没学过编程的人学习 Python前应该掌握些什么?...

    在众多高大上的自学指导中,尝试做一股清流,把要讲清楚的都讲清楚,除了一堆资料之外,你能在学之前就有一个非常明显的结果倾向. 本文以<小白带你学Python>为内容方向,试图在繁杂的信息里, ...

  9. 零基础学python多久可以工作-零基础学习python,要多久才可以学好并且找到工作?...

    原标题:零基础学习python,要多久才可以学好并且找到工作? 零基础的你想学习python肯定很关注学习python的最短时间是多久,怎样才能快速学习python等问题,今天就为大家详细地回答一下这 ...

  10. python编程基础与应用-有哪些适合零编程基础的人学习Python的书?

    筛选了2年内优秀的python书籍,个别经典的书籍扩展到5年内. python现在的主流版本是3.7(有明显性能提升,强烈推荐) 3.6, 不基于这两个或者更新版本的书,慎重选择.很多库已经不提供py ...

最新文章

  1. 二级域名session 共享方案
  2. 刚刚Sci-Hub和特朗普一样被永久封禁,Twitter官方:不得上诉
  3. malloc 初始化_在C语言中,请一定记得初始化局部变量!
  4. Python 环境搭建
  5. 十年后,你在元宇宙中的一天是什么样?
  6. 关于simulink运行中实时查看数据
  7. 使用wget抓取网站资源
  8. 基于粒子群算法的IEEE-30节点系统MATLAB配网无功优化仿真,有各变量参数,及仿真程序
  9. 雪の华 雪之华——不可不玩的好游戏(繁体中文版,附攻略、下载、歌词)...
  10. 14. Zigbee应用程序框架开发指南 - 睡眠设备
  11. 春考计算机组装维修知识点,山东春考计算机组装及维修模拟题.docx
  12. 计算机基础-数据存储
  13. java毕业生设计在线多媒体学习社区的设计与实现计算机源码+系统+mysql+调试部署+lw
  14. 微信登录的openid和unionid区别
  15. 关于UCOS任务卡死的原因分析
  16. 图片压缩算法,保证图片不失真
  17. Python 3.14 将比 C++ 更快
  18. 红魔系统更新服务器,红魔系统升级,操作和外观视觉大提升 网友:非常炫酷...
  19. 计算机集成技术||PT 软件介绍
  20. 第11周 oj 查闰年

热门文章

  1. EasyDarwin开源社区 短视频拍摄项目Github地址
  2. Linux 常用命令笔记
  3. 安卓界面之Toolbar上手
  4. 实验二:用机器指令和汇编指令编程
  5. UIView的clipsTobounds属性
  6. 洛谷P1467 循环数 Runaround Numbers
  7. JAVA笔记13__创建线程/线程休眠/等待线程终止/线程中断/守护线程
  8. jquery 向上滚动【四】个人认为好一些,哈
  9. python安装在什么系统下最好-学python语言用什么软件比较好?需要安装哪些软件?...
  10. python详细安装教程 path-Python解释器安装教程以及环境变量配置