python与C++的互操作
2008-04-23 09:07
302 查看
python中使用c++的模块,讲c++的动态链接库文件直接import进来就可以了。在windows下需要将dll文件扩展名修改为.pyd。在linux/unix下直接使用.so就可以了。 c++编写的python的模块都是动态链接库文件。 这是在windows下变使用普通函数编写的关键代码: static PyObject *ge(PyObject * self, PyObject * args){ std::string sts; sts = "help me"; return Py_BuildValue("s", sts.c_str() );}//这是处理函数static PyMethodDef allmehod[]={ {"ge", ge, METH_VARARGS}, {NULL, NULL} };//将函数对应给一个python方法#ifdef BUILD_DLL #define DLL_EXPORT __declspec(dllexport)#else #define DLL_EXPORT __declspec(dllimport)#endifextern "C"DLL_EXPORT void initpyt(){ PyObject *m, *d; m = Py_InitModule("pyt", allmehod); d = PyModule_GetDict(m);}//建立函数字典,暴露函数 在windows下面由于PE结构的问题编写动态连接库真的不是太舒服。不过在linux下就好多了,不需要导入导出的处理了,呵呵。 不过c++的准标准库中的boost::python库,更进一步的优化了这一过程。 #include<string>#include <boost/python.hpp>using namespace boost::python;#pragma comment(lib, "boost_python.lib")//这里在windows将boost_python.lib链接进来,在linux下去掉这一句在链接时加入静态库boost_python.a的路径就可以了std::string strtmp;char const* fe(){ strtmp ="返回的数据... : "; return strtmp.c_str();}BOOST_PYTHON_MODULE(ge){ def("fe", fe);}呵呵,boost确实很好,很强大!!!
相关文章推荐
- 把Python嵌入C++的具体操作方案的介绍
- python C++ Java 文件数据库等流操作,当打开后必须关闭
- 给有C或C++基础的Python入门 :Python Crash Course 4 操作列表 4.1--4.3
- C++文本操作.Vs.Python
- python中的赋值操作,与c++做对比
- python 中的赋值操作,与c/c++的对比
- 把Python嵌入C++的具体操作方案的介绍
- Mysql数据库操作字符集编码乱码错误 UnicodeEncodeError 'latin-1' - C/C++转Python疑难杂症(一)
- 给有C或C++基础的Python入门 :Python Crash Course 4 操作列表 4.4 --4.5
- 给有C或C++基础的Python入门 :Python Crash Course 4 操作列表 4.4 -- 4.5
- c++调用python操作mongo
- c++和Python互操作高级应用(5)
- c++和Python互操作高级应用
- Python 与 C/C++ 互操作资源汇总
- python 中的赋值操作,与c/c++的对比
- c++和Python互操作高级应用(5)
- Python中的文件操作
- C/C++文件输入输出操作——FILE*、fstream、windowsAPI
- python3——字符串操作
- python 文件和路径操作函数小结