fkjj.net
当前位置:首页 >> python 调用C++程序, C++程序如何返回数组给python >>

python 调用C++程序, C++程序如何返回数组给python

C/C++不能直接返回一个数组.这是由于在C/C++中,数组不是一种类型,因此不能被直接返回.一般有两种方法来返回一个数组.第一种方法:返回一个指向数组的指针,例如char (*retArray)[10]声明了一个函数retArray,该函数可以返回指向具有10个char元素的数组第二种方法:如果你不喜欢用指针的形式返回数组,那么可以采用返回一个结构的形式.这种形式相对较安全,可以避免忘记释放指针而造成内存泄露,也可以避免访问悬挂指针造成的错误.但缺点是由于结构是先拷贝再返回,因此如果结构较大时,会影响效率和占用较大内存.这是C的限制,Python调用C也是这种情况

用 ctypes, 接收返回的对象建个类, 类似下面这种:from ctypes import *class StandGo(Structure): _fields_ = [("x", c_int),("y", c_int)] 接收对象赋值给这个类应该就可以了 具体的看ctypes的文档了,自己试下了

题主,你基本操作没什么问题,有几个小地方要修改一下,修改如下:你的源码:PyObject* list = PyList_New(3); for (size_t i = 0; i < 3; i++)PyList_Append(list, Py_BuildValue("i", i));PyEval_CallObject(pFunc, list);------------------------------------------

很多办法都可以 如果你的c++对象是已有的代码,可以用cpython包装成Python对象,这些cpython包装的对象有一个指针是指向 你要包装的c++对象的,然后提供访问c++对象的方法.比如你一颗树可以包装成Python对象,树节点也包装成Python对象!

写一个cpp文件, 比如叫 abc.cpp //abc.cpp #include "Python.h" PyObject* _user_add( PyObject *self, PyObject *args ) { int xx; int yy; int zz; if (!PyArg_ParseTuple(args, "i|i", &xx,&yy)) return NULL; zz = xx+yy; return Py_BuildValue("i", zz); }

#传入数组的例子from ctypes import *cdll.LoadLibrary("libc.so.6") # doctest: +LINUXlibc = CDLL("libc.so.6") #IntArray5 = c_int * 5ia = IntArray5(5, 1, 7, 33, 99)qsort = libc.qsortqsort.restype = NoneCMPFUNC = CFUNCTYPE(c_int, POINTER(c

给你一个例子看看,你就知道怎么做了 C++的接口 typedef struct { unsigned long DeviceType; int Handle; int NumberOfClients; int SerialNumber; int MaxAllowedClients; }NeoDevice; int _stdcall icsneoFindNeoDevices(unsigned long DeviceTypes,

在C/C++中调用了这个函数之后不是会返回一个PyObject对象吗?那个对象就是一个List啊,然后使用PyList_Size()获取它的大小,使用PyList_GetItem()去读取其中的元素就ok了啊.找下Python的C API Manual,里面这些函数的用法写的很详细的.

range(3,1)是从3开始,到1结束.从最后一个往前遍历可以:for str in a.reverse(): print str或者:for i in range(2,-1,-1): print a[i]你可以看看range的说明:>>> help(range) range() range([start,] stop[, step]) -> list of integersstart:开始的数字(包含)stop:结束的数字(不包含)step:步长

array 是脚本中存储着从文件中解读数据的列表 b=pprint.pprint(array) # b是pprint调用的返回值;pprint并不将返回任何数据,所以b==None

相关文档
网站首页 | 网站地图
All rights reserved Powered by www.fkjj.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com