现在的位置: 首页 > 综合 > 正文

在c++程序中调用python脚本函数

2012年03月31日 ⁄ 综合 ⁄ 共 1964字 ⁄ 字号 评论关闭
在c++中调用python脚本函数的代码框架如下:
 1    Py_Initialize();      //初始化 python interpreter
 2
 3    PyObject *pName = PyString_FromString("test1");   //   python脚本文件名
 5    PyObject *pModule = PyImport_Import(pName);   //   import 脚本,返回pModule
                                                                                                     //   pModule指向这个脚本对象 

 7    if ( !pModule )
 8{
 9        cout<<"Can't find the file!"<<endl;
10        return 0;
11    }

12
14    cout<<"Get the function in .py"<<endl;    
15    PyObject *pDict = PyModule_GetDict(pModule);   //   通过pModule得到dictionary
                                                                                                       //   的指针pDict
16    PyObject *pFunc = PyDict_GetItemString(pDict,"Add");   //   通过pDict得到你所需的
                                                                                                       //    function,此处"Add"为test1.py
                                                                                                       //    的一个funciton object
17    PyObject *pParam = PyTuple_New(1);                       //    填写function所需要的参数
18    PyObject *pCurParam = PyInt_FromLong(10);
19    PyTuple_SET_ITEM(pParam,0,pCurParam);
20    PyObject *pAdded = PyObject_CallObject(pFunc,pParam);//   调用此function,并得到
                                                                                                       //    返回值
21    int max = PyInt_AsLong(pAdded);                              //    将返回值转换为c++的数据类型
22    cout<<"after added ,the number is "<<max<<endl;
23
24    Py_XDECREF(pAdded);                  //   引用计数减一
25    Py_XDECREF(pCurParam);
26    Py_XDECREF(pParam);
27//    Py_XDECREF(pFunc);
28//    Py_XDECREF(pDict);
29    Py_XDECREF(pModule);
30    Py_XDECREF(pName);
31
32    Py_Finalize();         //   关闭 python interpreter

这里有几个问题,目前还没有解决:
1).   我使用的是python25_d.dll,无法找到用activepython编辑的*.py文件中的function object 。我的activepython版本为2.4。
2).  程序末尾不能将 function object 和 dictionary object 的引用计数减一,如果执行此操作,程序会crash。

抱歉!评论已关闭.