snrg.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的文档了,自己试下了

使用返回值的方法有两种:可以直接把调用的函数作为变量使用可以用调用函数给一个变量赋值第一种情况见如下例子:l = [1,2,3,4,5]def add_element(list, element):list.append(element)return listprint add_element(l, 6)# >>> [1,2,3,4,5,6]print add_element(l, 6)[5]# >>> 6第二种情况:l1 = add_element(l, 6)print l1# >>> [1,2,3,4,5,6]print l1[5]# >>> 6注意: 以上例子都是应用于python 2.x

这个..应该是不行的.如果想要C++和python共享数据的话可以用pipeline或者写到一个公共文件里

在list后加[] 传递进去就好了 要是要改变原先的数组就要传递指针

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

python是是一种面向对象、直译式计算机程序设计语言,是解释性语言,一边解释一边执行,所以是不适合做游戏的.c++是支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格.可以说绝大多

简单为你介绍几种调用C++程序的几种方法生态导出通过boost实现导出类导出变参函数导出带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); }

是想采用python调用C写成的dll呢?还是想将C写的dll封装成python模块呢??如果是前者可以使用ctypes,如果是后者可以使用swig或者boost进行封装

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