python 调用 C++的DLL,函数参数是数组怎么处理? 5

最近刚学会用boost.python调用简单的c的函数,但是需要处理的是C++的类,我可以麻烦点把C++类都转化成C语言函数,但是函数参数有数组的怎么办?可以用C++的V... 最近刚学会用boost.python调用简单的c的函数,但是需要处理的是C++的类,我可以麻烦点把C++类都转化成C语言函数,但是函数参数有数组的怎么办?可以用C++的VECTOR吗,python怎么传入VECTOR?
好吧,想到个土办法,就是DLL里设个全局数组,python的数组用个循环,将数组的值一个个赋值给DLL里的全局变量。。
展开
 我来答
百度网友87b2a52
2013-05-09 · 知道合伙人软件行家
百度网友87b2a52
知道合伙人软件行家
采纳数:523 获赞数:3490
毕业于南京大学,硕士学位。10年软件研发经验。现任信息系统架构师。

向TA提问 私信TA
展开全部

给你一个例子看看,你就知道怎么做了

C++的接口

typedef struct
{
    unsigned long DeviceType;
    int Handle;
    int NumberOfClients;
    int SerialNumber;
    int MaxAllowedClients;
}NeoDevice;
int _stdcall icsneoFindNeoDevices(unsigned long DeviceTypes,  NeoDevice *pNeoDevices, int *pNumberOfDevices);


Python调用的代码:

class NeoDevice(Structure):
    _fields_ = [("DeviceType",c_ulong),
                ("Handle",c_int),
                ("NumberOfClients",c_int),
                ("SerialNumber",c_int),
                ("MaxAllowedClients",c_int)]
class cNeoVICan(CCanBase):
    def __init__(self):
        neoVi = windll.icsneo40
        self.icsneoFindNeoDevices = neoVi.icsneoFindNeoDevices
if __name__ == "__main__":
    canBus = cNeoVICan()
    print canBus.icsneoGetDLLVersion()
    iNumberOfDevices = (NeoDevice * 10)()
    num = c_int()
    iResult = canBus.icsneoFindNeoDevices(c_ulong(65535), cast(iNumberOfDevices, POINT(NeoDevice)), byref(num))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaisa1028
2013-05-09 · TA获得超过1.1万个赞
知道大有可为答主
回答量:5429
采纳率:28%
帮助的人:2569万
展开全部
你既然都要手动写C了,就在C里转换成PyObject不就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式