PyObject_CallObject返回值为0

yangsong235 2015-03-31 07:54:41
目的:在C中调用Python函数
问题:使用PyObject_CallObject调用自定义函数失败,返回值始终为0
代码:
pFunc = PyDict_GetItemString(pDict, "Add");
pArgs = Py_BuildValue("(i,i)",33,44);
pRetVal = PyObject_CallObject(pFunc, pArgs); //此处返回值始终为0

pytest.py定义如下:
import sys
def Add(a, b):
c = a + b
print c
return c

备注:pFunc不为空
...全文
1707 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我是这么理解的,print是输出到python控制台的,C++中调用可能导致函数执行错误 还有,因为今天是愚人节呀!
yangsong235 2015-04-01
  • 打赏
  • 举报
回复
引用 6 楼 xmnathan 的回复:
[quote=引用 5 楼 yangsong235 的回复:] [quote=引用 4 楼 xmnathan 的回复:] http://blog.csdn.net/xmnathan/article/details/7030509 PyObject* pModule = PyImport_Import(pName); PyObject* pFunc = PyObject_GetAttrString(pModule, "add"); //创建两个参数 PyObject* pParm = PyTuple_New(2); //为参数赋值 PyTuple_SetItem(pParm, 0, Py_BuildValue("i",3)); PyTuple_SetItem(pParm, 1, Py_BuildValue("i",4)); //函数调用 PyObject* pRetVal = PyEval_CallObject(pFunc, pParm); //解析返回值 int iRetVal = 0; #最后返回值就在iRetVal PyArg_Parse(pRetVal, "i", &iRetVal);
最后得到的值还是0,怎么办呢?[/quote] 检查下py代码,参数和返回值是否正确 去掉py中的print 语句试一下[/quote] 去掉print就可以了,这是为什么呢
  • 打赏
  • 举报
回复
引用 5 楼 yangsong235 的回复:
[quote=引用 4 楼 xmnathan 的回复:] http://blog.csdn.net/xmnathan/article/details/7030509 PyObject* pModule = PyImport_Import(pName); PyObject* pFunc = PyObject_GetAttrString(pModule, "add"); //创建两个参数 PyObject* pParm = PyTuple_New(2); //为参数赋值 PyTuple_SetItem(pParm, 0, Py_BuildValue("i",3)); PyTuple_SetItem(pParm, 1, Py_BuildValue("i",4)); //函数调用 PyObject* pRetVal = PyEval_CallObject(pFunc, pParm); //解析返回值 int iRetVal = 0; #最后返回值就在iRetVal PyArg_Parse(pRetVal, "i", &iRetVal);
最后得到的值还是0,怎么办呢?[/quote] 检查下py代码,参数和返回值是否正确 去掉py中的print 语句试一下
yangsong235 2015-04-01
  • 打赏
  • 举报
回复
引用 4 楼 xmnathan 的回复:
http://blog.csdn.net/xmnathan/article/details/7030509 PyObject* pModule = PyImport_Import(pName); PyObject* pFunc = PyObject_GetAttrString(pModule, "add"); //创建两个参数 PyObject* pParm = PyTuple_New(2); //为参数赋值 PyTuple_SetItem(pParm, 0, Py_BuildValue("i",3)); PyTuple_SetItem(pParm, 1, Py_BuildValue("i",4)); //函数调用 PyObject* pRetVal = PyEval_CallObject(pFunc, pParm); //解析返回值 int iRetVal = 0; #最后返回值就在iRetVal PyArg_Parse(pRetVal, "i", &iRetVal);
最后得到的值还是0,怎么办呢?
  • 打赏
  • 举报
回复
http://blog.csdn.net/xmnathan/article/details/7030509 PyObject* pModule = PyImport_Import(pName); PyObject* pFunc = PyObject_GetAttrString(pModule, "add"); //创建两个参数 PyObject* pParm = PyTuple_New(2); //为参数赋值 PyTuple_SetItem(pParm, 0, Py_BuildValue("i",3)); PyTuple_SetItem(pParm, 1, Py_BuildValue("i",4)); //函数调用 PyObject* pRetVal = PyEval_CallObject(pFunc, pParm); //解析返回值 int iRetVal = 0; #最后返回值就在iRetVal PyArg_Parse(pRetVal, "i", &iRetVal);
yangsong235 2015-04-01
  • 打赏
  • 举报
回复
顶一下!!!
yangsong235 2015-03-31
  • 打赏
  • 举报
回复
引用 1 楼 openXMPP 的回复:
有试过用Visual C++或G++ debug一下吗 debug是最有效的方式
没有,不会用
乔巴好萌 2015-03-31
  • 打赏
  • 举报
回复
有试过用Visual C++或G++ debug一下吗 debug是最有效的方式

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧