首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

高手帮忙看看python在.Net中为什么出错呀!该怎么处理

2012-03-19 
高手帮忙看看python在.Net中为什么出错呀!!!!!Py_Initialize()//初始化pythoninterpreterPyObject*pName

高手帮忙看看python在.Net中为什么出错呀!!!!!
Py_Initialize();             //初始化   python   interpreter

PyObject   *pName   =   PyString_FromString( "test ");       //       python脚本文件名
PyObject   *pModule   =   PyImport_Import(pName);       //       import   脚本,返回pModule
  //       pModule指向这个脚本对象  
if   (   !pModule   )
  {
  cout < < "Can 't   find   the   file! " < <endl;
  return   0;
}

cout < < "Get   the   function   in   .py " < <endl;        
PyObject   *pDict   =   PyModule_GetDict(pModule);       //       通过pModule得到dictionary的指针pDict

PyObject   *pFunc   =   PyDict_GetItemString(pDict, "Add ");       //       通过pDict得到你所需的function,此处 "Add "为test1.py


PyObject   *pParam   =   PyTuple_New(1);                                               //         填写function所需要的参数的一个funciton   object
PyObject   *pCurParam   =   PyInt_FromLong(10);
PyTuple_SET_ITEM(pParam,0,pCurParam);
PyObject   *pAdded   =   PyObject_CallObject(pFunc,pParam);//       调用此function,并得到返回值

int   max   =   PyInt_AsLong(pAdded);                                                             //         将返回值转换为c++的数据类型
cout < < "after   added   ,the   number   is   " < <max < <endl;
 
Py_XDECREF(pAdded);                                     //       引用计数减一
Py_XDECREF(pCurParam);
Py_XDECREF(pParam);
//         Py_XDECREF(pFunc);
//         Py_XDECREF(pDict);
Py_XDECREF(pModule);
//Py_XDECREF(pName);
 
Py_Finalize();                   //       关闭   python   interpreter


脚本为:
#E:\test.py
def   Add(a):
            b=a+4
            return   b


为什么我运行的时候总是崩溃呢?
就是在PyObject   *pFunc   =   PyDict_GetItemString(pDict, "Add ");   中pFunc的返回值为空.
请高手帮帮忙呀,我想了一天都没有找到原因...
谢谢了......
急急!!!!

[解决办法]
你那个错误就是说你的那个函数指针*pFunc没指向任何东西。偶不知道PyDict_GetItemString(pDict, "Add ")具体是怎么实现的,不过偶觉得你的参数有问题,把Add改一改试一试。偶平时写C#和ruby,很少写python,也没在.net下用过python,所以也不能保证能解决...
[解决办法]
不要把 脚本命名位test.py , test.py 是另外一个文件
import test
print test.__file__

另外可能需要把环境变量 PYTHONPATH加上脚本文件的路径
[解决办法]
PyObject *pParam = PyTuple_New(0);
PyObject *pAdded = PyObject_CallObject(pFunc, pParam);
看看
------解决方案--------------------


我这段是能通过的,
PyObject* pDict = PyModule_GetDict(pModule);

PyObject* pFunc = PyDict_GetItemString(pDict, "PrintHello");

PyObject* pNone = PyObject_CallObject(pFunc, NULL);
其中,
def PrintHello():
 print "Hello world";

热点排行