|
遇到一个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形参数呢?
|
|