找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 7290|回复: 0

[求助] 怎样向win32com对象的函数传递out形参

1

主题

1

帖子

5

积分

贫民

积分
5
wjh_bh 发表于 2014-6-26 16:15:45 | 显示全部楼层 |阅读模式
遇到一个COM类型对象,其中一个函数的形参是out形参:
int  ActEasyIF.ReadDeviceBlock(string szDevice,   int Isize,  out int IpIdata)   //函数原型,返回0表示读取成功

在C#下调用此方法,向 IpIdata形参传入一个int数组首元素值,在函数内部会获取设备 Isize 个实时数据,并将这些数值依次写入该数组 自0开始的Isize个元素中。


aa.ReadDeviceBlock(“D0”,  10,   out da[0]))  //C#调用,测试读取成功

python下通过win32com.client导入该COM控件:
>>> from win32com.client import Dispatch
>>> import pythoncom
>>> parser = Dispatch("ActMulti.ActEasyIF")
>>> parser.ActLogicalStationNumber = 1
>>> parser.Open()
0  #打开设备成功

>>> da = [0] *10
>>> parser.ReadDeviceBlock("D0", 10, da[0])
(0, 256)

>>> da   #数据没有写入列表
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]


上面的python脚本,将列表首元素传入函数,调用后,返回了一个元组(0, 256),0应该表示读取成功,256即是设备实时值的第一个元素值(仅一个,而非第二个参数指定的10个),但列表元素值并没有改变,问题肯定出在传递入函数的第三个实参上,但不知道python怎样对应COM函数的的out形参数呢?




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表