comtypes中的COM对象VARIANT参数(python)

3 投票
1 回答
3490 浏览
提问于 2025-04-18 10:38

我正在尝试在 Python 2.7.6.1 中使用 comtypes 1.1.0 包来访问 COM 对象,但我遇到了一个基本问题,就是从 COM 对象的方法中获取正确的数据,因为返回的是 VARIANT 类型。

>>> from comtypes.client import CreateObject
>>> fm1 = CreateObject("MCB.PCM")
>>> fm1.ReadVariable("dwt")
(<comtypes.automation.LP_tagVARIANT object at 0x06A541C0>,<comtypes.automation.LP_tagVARIANT object at 0x06A54210>, <comtypes.automation.LP_tagVARIANT object at 0x06A54260>, True)

在 Python 中如何转换 VARIANT(VARIANT 指针)?

通过 OLEViewer,我得到了以下信息:

[id(0x60020002)]
VARIANT ReadVariable(
        [in] VARIANT bsVar, 
        [out, optional] VARIANT* vValue, 
        [out, optional] VARIANT* tValue, 
        [out, optional] VARIANT* bsRetMsg);

你有没有什么想法可以转换它,并从 COM 方法中获取正确的数据?

我应该使用 pywin32(win32com 包)吗?

非常感谢。

彼得

1 个回答

-1

我不是Python专家,但我也在处理VARIANTS方面有一些经验。
这段“伪代码”可能对你有帮助。

from ctypes import *
from comtypes import automation 

if __name__ == '__main__':

    ...

    bsVar = automation.VARIANT("dwt")
    vValue = automation.VARIANT(0) 
    tValue = automation.VARIANT(0)
    bsRetMsg = automation.VARIANT(0)

    ReadVariable(bsVar, addressof(vValue), addressof(tValue), addressof(bsRetMsg))

    ...

附注:
我觉得,继续学习Python的工作原理是个好主意,虽然还没测试过,但以下内容可能有效:

    ...
    vValue,tValue,bsRetMsg = ReadVariable(automation.VARIANT("dwt"))
    ...

撰写回答