使用win32com的COM对象的事件处理程序

时间:2014-06-22 08:31:06

标签: python events handler win32com

我遇到了在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中使用它。

0 个答案:

没有答案