c++调用python 无结果返回问题,求教!

问题描述:
程序执行至调用函数前都没有错误,但返回的结果为空,即pReturn为空。想请教各位这是什么原因?另外,在释放python对象指针代码处,VS2010编译报错(之前灰掉这块了):
“ 无法解析的外部符号 imp_Py_Dealloc,该符号在函数 main 中被引用
1>TT.obj : error LNK2019:
无法解析的外部符号 __imp
__Py_NegativeRefcount,该符号在函数 main 中被引用
1>TT.obj : error LNK2001: 无法解析的外部符号 __imp
__Py_RefTotal”
请大神指点!以下是代码块。
python代码

  #-*- coding:gb2312 -*-
def hello(a,b) :
    return a+b

c++代码

 #include<iostream>
#include<Python.h>
using namespace std;
int main()
{
    Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化
    PyObject * pModule = NULL;//声明变量

    PyObject * pFunc = NULL;// 声明变量
    PyObject *pDict = NULL;
    PyObject *pArgs = NULL;
    pModule =PyImport_ImportModule("test_call");//这里是要调用的文件名
    if ( !pModule )
    {
        printf("can't find pytest.py");
        getchar();
        return -1;
    }

    pDict = PyModule_GetDict(pModule);
    //pFunc= PyObject_GetAttrString(pModule, "hello");//这里是要调用的函数名
    pFunc = PyDict_GetItemString(pDict, "hello");

    if ( !pFunc || !PyCallable_Check(pFunc) )
    {
        printf("can't find function [hello]");
        getchar();
        return -1;
    }

    pArgs = Py_BuildValue("i",3);
    pArgs = Py_BuildValue("i",4);

    PyObject *pReturn = NULL; 
    pReturn = PyEval_CallObject(pFunc, pArgs);//调用函数

    if(!pReturn)
    {
        cout<<"null.\n";
        return -1;
    }

    int result = -1;  
    if (pReturn && PyArg_ParseTuple(pReturn,"i", &result))
    {
        cout << "3+4 = " << result << endl;
    }  

    Py_DECREF(pModule);
    Py_DECREF(pFunc);
    Py_DECREF(pDict);
    Py_DECREF(pArgs);

    Py_Finalize();//调用Py_Finalize,这个根Py_Initialize相对应的。

     return 0;
}
0

5个回答

是不是py文件编码格式问题?找不到对应函数名

0
zhoujiebiao
seekColorful pFunc不是空的,应该是找到函数了。就是到后面返回结果时是空的,不知为什么呢
4 年多之前 回复
 #!/usr/bin/python
 #coding:utf-8

 def hello(a,b):
                return a+b
if __name__ == '__main__':
                c=hello(a,b)
                assert(c == a+b)

0
zhoujiebiao
seekColorful 试了下还是不行,pReturn仍然是空的。。sigh~
4 年多之前 回复

去掉python函数中的print语句

0

你是怎么解决的?我也出现了这样的问题

0

解决方法

修改两个头文件

1 注释掉object.h第56行

//#define Py_TRACE_REFS

2 pyconfig.h 375行

//# define Py_DEBUG

以上两个宏定义注释掉以后重新编译 问题解决

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
python调用C动态库导出函数的返回值为指针类型时,在64位python环境下被截断解决方法
2015年8月20日 16:57:11rn     又为一个问题浪费了两天的时间:rn     问题描述如下:染色日志库通过ctype导入,在64位的linux系统中只有主线程能正常使用,子线程创建日志对象并使用都会出错,报段错误。rn     问题的最终原因:64位的地址被python向int转换发生截断。rnrn          class my_void_p(c_void_p):rn   
C/C++实战006:解决python调用dll返回数字问题
昨填在调用c/c++编译的dll时遇到一个问题,那就是当我们用string定义函数的时候,出现警告与c不兼容,于是我把返回值改成了char*,虽然不报错,但是返回的数据确是一串数字(每次返回还不一样),根本无法识别返回状态。nnn警告 1 warning C4190: “transmission”有指定的 C 链接,但返回了与 C 不兼容的nnnn 因为这里是跨平台调用,无...
C#写COM组件
求教求教求教求教求教求教求教
21sji狗哥搜索
修正中文搜索问题 修正无结果时的错误提示
C处理Python返回的字串代码
   代码如下:nnnvoid process_result(PyObject* pResult)n{n //char pRet[MAX_NAME_SIZE] = {0};n char* pRet = NULL;n PyArg_Parse(pResult, &quot;s&quot;, &amp;amp;pRet);n DATABUFFER_APPEND(pBuffe...
fastText中常见问题汇总
fastText中常见问题汇总:n1、什么是fastTextnfastText是一个用于文本分类和词向量表示的库,它能够把文本转化成连续的向量然后用于后续具体的语言任务,目前教程较少!nn2、为什么训练的模型非常大nfastText对字和字符串使用hash表,hash表的大小将直接影响模型的大小,可以通过选项-hash来减少词汇hash表的大小,一个可选的好参数时20000。另一个影响模型大小重要...
求教一道关于求解最优化问题的编程问题~
求教一道关于求解最优化问题的编程问题~
C/C++ 调用python函数,接收返回值
转自:https://blog.csdn.net/stu_csdn/article/details/69488385n
mybatis的查询无结果时的返回值报错问题
mybatis的查询无结果时报错:(方法名)queryAllNumFromCart attempted to return null from a method with a primitive return type (long)的问题nqueryAllNumFromCart此方法在mapper.xml中是这样定义的:nn &amp;lt;select id=&quot;queryAllNumFromCart&quot; ...
python调用c/c++时string的传入与返回深入分析
ctypes可以轻松实现在python调用c/c++的库,但是这貌似没有对string类型的传入和返回有很好的支持。这篇文对传入string类型的参数进行分析并提供返回string替代方法......
python ctypes库3_如何传递并返回一个数组
可以将数组指针传递给dll,但无法返回数组指针,python中没有对应的数组指针类型。如果需要返回数组,需借助结构体。参考ctypes官方文档:https://docs.python.org/3.6/library/ctypes.html#structures-and-unions返回一个结构体例程:# 返回结构体nimport ctypesnpath = r'E:\01_Lab\VisualSt...
python调用c++ ctype list传数组 或者 返回数组
pycallclass.cpp:n#include nusing namespace std;ntypedef unsigned char BYTE;n#define MAX_COUNT 20nnstruct tagOutCardResult_pyn{n BYTE cbCardCount; n BYTE cbResultCard1;n BYTE cbR
python 接收C++接口字符串返回值
#from googlernrnfrom ctypes import *rnhello_lib = cdll.LoadLibrary("hello.so")rnhello = hello_lib.hellornhello.restype = c_char_prnprint hello(“world”)
求教关于视窗中滚动条 滚动后 擦除和重绘的问题
关于滚动条 重绘 和 擦除的问题 急急急 求教
vb-mschart查询Access数据
vb-mschart查询Access数据, 顺便求教。问题在里面。 noleic@foxmail.com 谢谢
在C/C++中嵌入python, 用PyImport_ImportModule返回值总是为0的解决方法
import某块返回值为0的是因为:VC工程的当前工作目录和.py文件所在目录不一致导致的。rn当.py文件和工程不在统一目录时,若要import .py文件,只需要在import之前增加python的搜索目录就可以了:rnrn    PyRun_SimpleString("import sys"); rn   PyRun_SimpleString("sys.path.append('py所在目录
【python C结构体】Python Ctypes结构体指针处理(函数参数,函数返回)
n n n 一切以官网为准:https://docs.python.org/3.6/library/ctypes.htmln以下为参考:nn1、在python中调用C语言生成的动态库,返回结构体指针,并进行输出!nnnmylib.c(动态库源代码)nnnnnnn// 编译生成动态库: gcc -g -fPIC -shared -o libtest.so test.c  nnn  nnn...
python ctypes调用C返回指针类型,64位值被转换成32位值
调用c函数前先指定返回类型nnnnlib.ctopy.restype = POINTER(c_ubyte)
python调用c语言的动态链接库时传递字符串参数的问题
最近在用python调用科大讯飞的接口进行语音识别工作,大概的过程是:用python加载科大讯飞提供的动态链接库,然后用这个动态链接库来进行语音识别。全部代码就不给出来了,这只给出困扰我的部分。nnnnfrom ctypes import cdllnncur = cdll.LoadLibrary('libmsc.so')nMSPLogin = cur.MSPLoginnret = MSPLogin...
C++调用Python函数(二)——调用函数并输出返回值
上一篇博客介绍了如何配置C++调用Python环境: nC++调用Python环境配置nn调用的Python函数hello.py:nndef add_num(a,b):n return a+bnnC++调用Python:nnnn#include &amp;amp;lt;Python.h&amp;amp;gt;n#include&amp;amp;lt;iostream&amp;amp;gt;nnusing namespace std;nnint main(...
Python运行正常但是没有结果
小白自学Python做题时发现了一个问题,这个是水仙花数的求解,然后发现这个码pycharm运行正常但是没有结果。。。。不知道为什么呀,感觉很懵逼呀,求大佬们帮忙解答...
python中GIL问题(多线程问题,调用的函数用C语言写)
python中GIL问题(多线程问题)
python调用c++返回带成员指针的类指针
class Rtmp_tool {npublic:n intnnnm_width;nAVCodecContext * c;nn};nnnnnnRtmp_tool * rtmp_tool;nrtmp_tool = newnRtmp_tool();nrtmp_tool-&amp;gt;m_width = 60;nrtmp_tool-&amp;gt;c = c;nreturn rtmp_tool;
c++ 调用 python 函数中文返回值乱码
C++调用 python的方法就不说   网上不缺的就是这帖子  n如 :nhttp://www.cnblogs.com/allensun/archive/2011/02/04/1949090.htmlnhttp://www.jcwcn.com/article-30546-1.htmlnn然而并都没什么卵用,没有确切的指出我们今天的这个问题该怎么解决。n问题:c++ 调用 python
c++ 调用python返回指针
这个失败:Student a; s.setName(&quot;A&quot;);return &amp;amp;s;这个成功://Studeng *b = new Student();Student *b;b = new Student();b-&amp;gt;setName(&quot;B&quot;);return b;
python 调用C动态库
最近打算用python仿真一下ISP pipeline的算法,但是发现python在处理大图像方面非常慢,于是想到用python调用c的函数,在c中做图像的像素级别的操作。要用调用c中函数,我们首先需要解决如何将numpy的array的buffer传入到c函数以及如何返回的问题。n下面就是一个简单的demo。python 代码:nimport os.pathnimport numpy as n
Python调用C函数求教
C函数声明如下:rn[img=https://img-bbs.csdn.net/upload/201307/14/1373809620_285396.png][/img]rnrn现在想在Python中调用此函数,该怎么做???查了一些这方面的资料,知道可以用的方法有:swig、sip、ctypesrn但具体怎么做就不知道了,比如x、y、a、dt在swig/sip/ctypes中声明类型是list吗???rn另外,我电脑上装了MinGW,怎么编译生成DLL呢??普通的C代码就可以编译成DLL吗??rnrn谢谢啦!!!
C++ 调用 Python3.6中的各种坑
使用Python3.6,在VS2013与VS2017中进行调用,其中的遇到了各种坑,将暂时遇到的坑先进行整理;nn1:py文件不能以 test命名,不知道为什么,以test1,test2之类的命名都可以,但就是不能使用 test命名,否则,找不到函数名,即nn    pFunc = PyObject_GetAttrString(pModule, &quot;hello&quot;);该代码找不到 python 中的 ...
python调用C/C++动态库
文章目录1. 背景知识1.1 动态链接库1.2 `extern &amp;quot;C&amp;quot;`作用1.3 动态链接库加载方式1.3.1 隐式链接1.3.2 显式链接2. python操作动态库2.1 加载动态库2.2 指定函数命名2.3 参数类型2.3.1 值类型2.3.2 指针类型2.3.3 引用类型2.3.4 结构体类型3.总结nn本文以windows环境下的.dll动态链接库为背景展开,有关linux下的.so动...
mysql的not in 导致查询无结果原因
错误sqlrndeletenfromn company_info nwhere id NOT inn (SELECT n company_info_ID n FROMn USER);rn因为null的原因,导致出现子查询的结果为空。rn正确的写法是rn-- 清除重复的不可用的公司信息 ndeletenfromn company_info nwhere id N
python调用C函数时的数组传递
python调用C函数时的数组互传n2019-4-5nn引言:最近需要对一个算法进行并行加速,最初使用python实现的,也尝试了用python中的多线程进行加速,后来才发现,python中的threading受制于GIL,同时只能使用一个核进行运算,所以搞了半天最后发现多线程和非并行算法在运行时间上无差别。当然我也尝试了multiprocessing模块,但我那个算法不适合用多进程的方法加速,...
python调用api
python调用api代码。实现api的调用,参数的设置、返回信息的处理等。
python调用存储过程,获取返回值
python调用存储过程,获取返回值rnsql = """n call pro_test(%s,@tt);n select @tt as pro_outn"""ncur =yield self.pool.execute(sql, ("test"))nres,old=dbInterface.getone(cur,o=1)npro_out = old.get("pro_out")
C调用python简单例子.rar
C调用python简单例子.rar C调用python简单例子.rar
解决C++调用Python中文乱码
C++调用Python,包括参数传递及返回值的处理的教程都很多。但是对于中文字符作为参数传递时,会遇到编码问题而乱码甚至崩溃。经过搜集资料,终于解决乱码问题,特记录在此:1、参数传递一般采用PyObject* objArg = Py_BuildValue(&quot;s&quot;, &quot;Hello&quot;)构建参数,当输入参数为中文时,objArg则返回为空指针。原因是:Python为UTF-8编码,而C++中中文大多采用...
Python调用C的基础学习(传递数字、字符串、数组(一维、二维)、结构体)
一:Python调用windows下DLLnn注:我使用的环境:anaconda的Python 3.6 32-bit;vs2010;Windowsnn1、如何使用vs2010生成dllnn参见1~4步:https://jingyan.baidu.com/article/5bbb5a1bd4a7bd13eaa17968.htmlnn注:生成的dll文件在建立的项目debug文件夹下,如下图所示:nn...
C调用Python崩溃的记录
  也不确定哪里出了问题。nn  根据目前了解的情况,出错原因如下:nn新产生一个数组缓冲区。n 产生调用Python的数组参数。n 销毁该缓冲区。n 调用Python函数。n  这时发现这个缓冲区已经销毁了,于是出错了。nn  正确做法是,3、4颠倒。nn  参考《C向Python传递数组参数时,调用函数后才能销毁》。nn  nnn#0 0x00007f474329b984 in ?? ()n...
c++调用python脚本遇到的那些坑
问题一:一开始我是在qt上编写程序的,qt是32bit,但Python是64bit,在*.pro文件中配置了:nnINCLUDEPATH += C:/Python27/include/nLIBS += C:/Python27/libs/python27_d.libn还是报错,究极原因是bit位数一定要匹配,因此要下载64bit的qt,但自带编译器的qt MinW版找了好久没看到64bit,
Linux下 Python通过ctypes调用C API (二)
关于python与C混编的(数组类型)参数和返回值传递1.python向C中传递数组参数helloWorld.c#include&amp;lt;stdio.h&amp;gt;nvoid test(int input[])n{n printf(&quot;Hello World!\n&quot;);n int i=0;n for(i=0;i&amp;lt;2;i++){n printf(&quot;%d &quot;,input[i]); n }n}main....
python通过swig调用c程序举例
python调用c程序举例
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 python百度地图学校无结果 python调用深度学习