comtypes:在call_with_inout中,ctypes TypeError:'c_double'对象不可迭代

时间:2015-04-18 06:14:28

标签: python ctypes comtypes

我正在使用Python 2.7.9中的Agilent IVI驱动程序,似乎无法在特定的Windows 7计算机上使用“经过验证的”代码。它在其他机器上成功执行。

虽然这个问题似乎仅限于一个工具,但它似乎是一个更广泛的Python问题,所以我转向Stack Overflow寻求帮助。任何帮助或见解都会很棒。

以下代码

# Import the TLB

from comtypes.client import GetModule, CreateObject
GetModule('AgInfiniium.dll')

# Pull in the coefficients and classes, we'll need those
from comtypes.gen.AgilentInfiniiumLib import *

# Instantiate the driver
OScope = CreateObject('AgilentInfiniium.AgilentInfiniium')

# Make constants of our settings
Address = "TCPIP0::10.254.0.222::INSTR"
resetOScope = False

# Open a connection to the scope
OScope.Initialize(Address,False,resetOScope,'')

# Make a measurement
print OScope.Measurements.Item("Channel1").ReadWaveformMeasurement(
    MeasFunction=AgilentInfiniiumMeasurementAmplitude, MaxTime=10)

产生以下错误:

Traceback (most recent call last):
  File "P:\Aperture\Validation\WMI_BGA_Board\TestMatrixCode\scopeTest2.py", line 29, in <module>
    print OScope.Measurements.Item("Channel1").ReadWaveformMeasurement(MeasFunction=AgilentInfiniiumMeasurementAmplitude ,MaxTime=10)
  File "C:\Python27\lib\site-packages\comtypes-1.1.0-py2.7.egg\comtypes\__init__.py", line 656, in call_with_inout
    rescode = list(rescode)
TypeError: 'c_double' object is not iterable

在我有限的调试尝试中,我看到了这个call_with_inout 函数尝试将我的Python参数转换为以下C ++函数的参数:

public void ReadWaveformMeasurement(
    AgilentInfiniiumMeasurementEnum MeasFunction,
    AgilentInfiniiumTimeOutEnum MaxTime,
    ref double pMeasurement)

它为pMeasurement指针创建某种变量,最终为c_double类型,然后抱怨它不可迭代。

在这一点上,这似乎是这台机器的本地。我已经去了卸载Python,重新安装Agilent驱动程序,并尝试两个版本的comtypes(1.1.0和1.1.1)。然而问题仍然存在。有任何想法吗?感谢。

0 个答案:

没有答案