C++调用Python(4)
来源:互联网 发布:it接单平台 编辑:程序博客网 时间:2024/06/14 00:15
其实,C++调用Python有两种方式,我前面介绍了第一种方式:通过找到Python模块,类,方法,构造参数来调用。第二中方式,就是通过构造出一个Python的脚本,用python引擎来执行。第一种方式可能更为优雅,符合大多数的反射调用的特点。(我在以前的一个项目中,实现了c#的反射机制,c#调用Com+,c#调用javascript脚本等)。
还有一个问题,两种语言互相调用的时候,需要做数据结构(如基本类型,字符串,整数类型等,以及自定义的类等类型)间的转换,共享内存中的一个对象。比如,如何将C++的对象实例传入python中,并在python中使用。c++和python并不在一个进程中,因此可以使用boost的shared_ptr来实现。
下面这个例子,主要是演示了,c++调用python,可以在c++中形成一个python脚本,然后利用PyRun_SimpleString调用;并且,构造一个c++的对象,传入到python中,并在python的脚本中调用其函数。
还有一个问题,两种语言互相调用的时候,需要做数据结构(如基本类型,字符串,整数类型等,以及自定义的类等类型)间的转换,共享内存中的一个对象。比如,如何将C++的对象实例传入python中,并在python中使用。c++和python并不在一个进程中,因此可以使用boost的shared_ptr来实现。
下面这个例子,主要是演示了,c++调用python,可以在c++中形成一个python脚本,然后利用PyRun_SimpleString调用;并且,构造一个c++的对象,传入到python中,并在python的脚本中调用其函数。
- #include <boost/python.hpp>
- #include <iostream>
- using namespace boost::python;
- class World
- {
- public:
- void set(std::string msg) { this->msg = msg; }
- std::string greet() { return msg; }
- std::string msg;
- };
- typedef boost::shared_ptr < World > world_ptr;
- BOOST_PYTHON_MODULE(hello)
- {
- class_ <World>("World")
- .def("greet", &World::greet)
- .def("set", &World::set)
- ;
- register_ptr_to_python <world_ptr>();
- }
- int main(int argc, char *argv[])
- {
- Py_Initialize();
- world_ptr worldObjectPtr (new World);
- worldObjectPtr->set("Hello from C++!");
- try
- {
- inithello();
- PyRun_SimpleString("import hello");
- object module(handle <>(borrowed(PyImport_AddModule("__main__"))));
- object dictionary = module.attr("__dict__");
- dictionary["pyWorldObjectPtr"] = worldObjectPtr;
- PyRun_SimpleString("pyWorldObjectPtr.set('Hello from Python!')");
- }
- catch (error_already_set)
- {
- PyErr_Print();
- }
- std::cout << "worldObjectPtr->greet(): " << worldObjectPtr->greet() <<std::endl;
- Py_Finalize();
- return 0;
- }
转自:http://blog.csdn.net/marising/article/details/2962322
- Python调用C/C++(使用SWIG)
- Python调用c/c++函数(1)
- Python调用c/c++函数(1)
- Python调用C可执行程序(subprocess)
- C/C++ 调用 Python(实例)
- c/c++调用python(2)
- BCB(C++)调用Python
- C中调用PYTHON
- C调用python
- C调用python
- Python 调用 C函数
- python调用c
- Python 调用C
- c中调用python
- Python调用c/c++
- c 调用python
- python 调用 c 函数
- python调用C函数库
- 【教程连载】ArcGIS for iOS 开发系列(4) – 基础篇-地图组件
- 读《编程匠艺》有感
- Linux 服务器性能监视工具小结
- 如果爱,请深爱:10大iOS开发者最喜爱的类库
- PHP内存泄漏
- C++调用Python(4)
- 5个最佳的3D游戏开发工具
- 【教程连载】ArcGIS for iOS 开发系列(3) – 基础篇-“Hello World Map”
- NSMutableArray中存放struct变量的方法
- SQL2000的系统表sysproperties在SQL2005中 无效的问题
- c++和Python互操作高级应用(5)
- An association from the table B_USER refers to an unmapped class: com.shxt.framework.book.bo.Dict
- 资料分享:2012台湾骇客年会(HITCON 2012)大会演讲PPT
- SQL脚本