yyang-ntan

导航

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

在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。

posted on 2007-01-04 16:36  永远自由的心  阅读(3216)  评论(0编辑  收藏  举报