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

在c++中调用python脚本函数的代码框架如下:
 1 None.gif     Py_Initialize();      //初始化 python interpreter
 2 None.gif
 3 None.gif    PyObject  * pName  =  PyString_FromString( " test1 " );   //   python脚本文件名
 5 None.gif    PyObject  * pModule  =  PyImport_Import(pName);   //   import 脚本,返回pModule
                                                                                                     //   pModule指向这个脚本对象 

 7 None.gif      if  (  ! pModule )
 8 ExpandedBlockStart.gifContractedBlock.gif {
 9InBlock.gif        cout<<"Can't find the file!"<<endl;
10InBlock.gif        return 0;
11ExpandedBlockEnd.gif    }

12 None.gif
14 None.gif    cout << " Get the function in .py " << endl;    
15 None.gif    PyObject  * pDict  =  PyModule_GetDict(pModule);   //   通过pModule得到dictionary
                                                                                                       //   的指针pDict
16 None.gif    PyObject  * pFunc  =  PyDict_GetItemString(pDict, " Add " );   //   通过pDict得到你所需的
                                                                                                       //    function,此处"Add"为test1.py
                                                                                                       //    的一个funciton object
17 None.gif    PyObject  * pParam  =  PyTuple_New( 1 );                       //    填写function所需要的参数
18 None.gif    PyObject  * pCurParam  =  PyInt_FromLong( 10 );
19 None.gif    PyTuple_SET_ITEM(pParam, 0 ,pCurParam);
20 None.gif    PyObject  * pAdded  =  PyObject_CallObject(pFunc,pParam);//   调用此function,并得到
                                                                                                       //    返回值
21 None.gif     int  max  =  PyInt_AsLong(pAdded);                              //    将返回值转换为c++的数据类型
22 None.gif    cout << " after added ,the number is  " << max << endl;
23 None.gif
24 None.gif    Py_XDECREF(pAdded);                  //   引用计数减一
25 None.gif    Py_XDECREF(pCurParam);
26 None.gif    Py_XDECREF(pParam);
27 None.gif //     Py_XDECREF(pFunc);
28 None.gif //     Py_XDECREF(pDict);
29 None.gif     Py_XDECREF(pModule);
30 None.gif    Py_XDECREF(pName);
31 None.gif
32 None.gif    Py_Finalize();         //   关闭 python interpreter
这里有几个问题,目前还没有解决:
1).   我使用的是python25_d.dll,无法找到用activepython编辑的*.py文件中的function object 。我的activepython版本为2.4。
2).  程序末尾不能将 function object 和 dictionary object 的引用计数减一,如果执行此操作,程序会crash。

转载于:https://www.cnblogs.com/yyang-ntan/archive/2007/01/04/611533.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值