c++ 调用 python
来源:互联网 发布:php读取txt文件前字符 编辑:程序博客网 时间:2024/06/16 12:01
1. 新建控制台程序
2. 属性配置
说明:python26_d.lib的获取方式参见上一篇文章。
3. c++代码
#include <iostream>#include <Python.h>using namespace std;void HelloWorld();void Add();void TestTransferDict();void TestClass();int main(){cout << "Starting Test..." << endl;cout << "HelloWorld()-------------" << endl;HelloWorld();cout << "Add()--------------------" << endl;Add();cout << "TestDict-----------------" << endl;TestTransferDict();cout << "TestClass----------------" << endl;TestClass();system("pause");return 0;}//调用输出"Hello World"函数void HelloWorld(){Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化PyObject * pModule = NULL;//声明变量PyObject * pFunc = NULL;//声明变量pModule =PyImport_ImportModule("Test001");//这里是要调用的Python文件名pFunc= PyObject_GetAttrString(pModule, "HelloWorld"); //这里是要调用的函数名PyEval_CallObject(pFunc, NULL); //调用函数,NULL表示参数为空Py_Finalize();//调用Py_Finalize,这个和Py_Initialize相对应的.}//调用Add函数,传两个int型参数void Add(){Py_Initialize();PyObject * pModule = NULL;PyObject * pFunc = NULL;pModule =PyImport_ImportModule("Test001");//Test001:Python文件名pFunc= PyObject_GetAttrString(pModule,"add");//Add:Python文件中的函数名//创建参数PyObject *pArgs = PyTuple_New(2); //函数调用的参数传递均是以元组的形式打包的,2表示参数个数PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 5));//0---序号i表示创建int型变量PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", 7));//1---序号//返回值PyObject *pReturn = NULL;pReturn = PyEval_CallObject(pFunc, pArgs);//调用函数//将返回值转换为int类型int result;PyArg_Parse(pReturn, "i", &result);//i表示转换成int型变量cout << "5+7 = " << result << endl;Py_Finalize();}//参数传递的类型为字典void TestTransferDict(){Py_Initialize();PyObject * pModule = NULL;PyObject * pFunc = NULL;pModule =PyImport_ImportModule("Test001");//Test001:Python文件名pFunc= PyObject_GetAttrString(pModule, "TestDict"); //Add:Python文件中的函数名//创建参数:PyObject *pArgs = PyTuple_New(1); PyObject *pDict = PyDict_New(); //创建字典类型变量PyDict_SetItemString(pDict, "Name", Py_BuildValue("s", "WangYao")); //往字典类型变量中填充数据PyDict_SetItemString(pDict, "Age", Py_BuildValue("i", 25)); //往字典类型变量中填充数据PyTuple_SetItem(pArgs, 0, pDict);//0---序号将字典类型变量添加到参数元组中//返回值PyObject *pReturn = NULL;pReturn = PyEval_CallObject(pFunc, pArgs);//调用函数//处理返回值:int size = PyDict_Size(pReturn);cout << "返回字典的大小为: " << size << endl;PyObject *pNewAge = PyDict_GetItemString(pReturn, "Age");int newAge;PyArg_Parse(pNewAge, "i", &newAge);cout << "True Age: " << newAge << endl;Py_Finalize();}//测试类void TestClass(){Py_Initialize();PyObject * pModule = NULL;PyObject * pFunc = NULL;pModule =PyImport_ImportModule("Test001");//Test001:Python文件名pFunc= PyObject_GetAttrString(pModule, "TestDict"); //Add:Python文件中的函数名//获取Person类PyObject *pClassPerson = PyObject_GetAttrString(pModule, "Person");//创建Person类的实例PyObject *pInstancePerson = PyInstance_New(pClassPerson, NULL, NULL);//调用方法PyObject_CallMethod(pInstancePerson, "greet", "s", "Hello Kitty"); //s表示传递的是字符串,值为"Hello Kitty"Py_Finalize();}
4. python代码
#Test001.py def HelloWorld(): print "Hello World" def add(a, b): return a+b def TestDict(dict): print dict dict["Age"] = 17 return dict class Person: def greet(self, greetStr): print greetStr #print add(5,7) #a = raw_input("Enter To Continue...")
说明:以上代码来自http://www.cnblogs.com/Hisin/archive/2012/02/27/2370590.html,感谢原作者!
经过本人验证,代码完全正确。
注意:当python代码有错误时,PyImport_ImportModule函数返回NULL;
2 0
- 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函数库
- Python调用C
- Python调用C/C++
- Python调用C程序
- python调用c/c++
- python调用c
- c调用python
- finally block and Exception handling -- Java
- 利用Appserv + DZ搭建一个论坛模板
- 以自己的亲身经历献给那些在沈阳找工作看见沈阳深讯招聘信息的程序员们
- Cracking The Coding Interview5.1
- 第7周作业1-循环大战
- c++ 调用 python
- MYSQL用户权限管理(Grant,Revoke)
- POJ 3693 Maximum repetitionsubstring(后缀数组:循环子串)
- win8系统打不来chm文档文件的解决方案
- ifndef define endif
- 初级单例模式
- 第7周作业2-极值计算
- extern "C"
- 移植u-boot-2009-11->S3c44b0公板