我遇到了在python中COM
对象"MCB.PCM"
上触发事件的问题。我使用win32com
包并且应用程序fmstr (COM Object "MCB.PCM")
并行运行,我想与之通信。
此代码适用于python控制台,但没有触发任何事件,甚至并行运行的应用程序在Event
发生时被冻结
>>> class fmstrEvents(object):
... def OnRecroderDone(self):
... print "Hello OnRecroderDone"
>>> import win32com.client
>>> fm = win32com.client.Dispatch("MCB.PCM")
>>> fm_events = win32com.client.WithEvents(fm,fmstrEvents)
我是否遗漏了代码或错误处理事件或COM Object
?
我遇到的其他问题是,只要这些方法通过/返回COM Object
,我就可以使用VARIANT
方法。
>>> fm.ReadVariable("dwt")
(True, 0.009999999776482582, u'0.01', u'')
HRESULT ReadVariable(
[in] VARIANT bsVar,
[out, optional] VARIANT* vValue,
[out, optional] VARIANT* tValue,
[out, optional] VARIANT* bsRetMsg,
[out, retval] VARIANT* pOk);
但我确实知道访问(读取)VARIANT
数组如何返回,例如。
>>> fm.GetCurrentRecorderData
<bound method IMcbPcm.GetCurrentRecorderData of <win32com.gen_py.MCB PCMaster Services.IMcbPcm instance at 0x110857432
HRESULT GetCurrentRecorderData(
[out, optional] VARIANT* arrData,
[out, optional] VARIANT* arrSerieNames,
[out, optional] VARIANT* timeBaseSec,
[out, optional] VARIANT* bsRetMsg,
[out, retval] VARIANT* pOk);
所以COM Object
方法有效,但我需要获取VARRIANT
数组数据(VARIANT* arrData
)才能进一步处理它。
非常感谢。
彼得
P.S。我在Matlab中使用这个COM Object
,我可以注册和处理事件,使用COM Object
方法等...我也很想在python中使用它。