【问题标题】:Unable to dispatch com object in python无法在 python 中调度 com 对象
【发布时间】:2011-12-05 23:37:01
【问题描述】:

我正在尝试从名为 eSignal 的数据馈送提供商获取交易价格。在他们的开发者页面 (Link) 上使用他们的示例,我可以轻松地复制 C# 中的功能。不幸的是,提供者不支持 python 开发人员,因此我试图自己做这件事,在他们的例子中使用 com 对象引用。但是,我一开始就失败了,因为我无法调度有问题的 com 对象。

com 对象由 eSignal 提供(WinSig.exe 包含 com 对象数据),我使用 makepy (IESignal v.1.0.0) 注册了它:

C:\Python26\Lib\site-packages\win32com\client>python makepy.py
Generating to C:\Python26\lib\site-packages\win32com\gen_py\9C7CCB46-E9E8-4DDD-9784-4458877C2F10x0x1x0.py
Building definitions from type library...
Generating...
Importing module

这样模块文件就生成成功了。然后我尝试从 python 调度它:

from win32com.client import Dispatch
from win32com.client.gencache import EnsureDispatch

CLSID = '{9C7CCB46-E9E8-4DDD-9784-4458877C2F10}'
print Dispatch(CLSID)

但是,这会导致错误:

com_error: (-2147221164, 'Class not registered', None, None)

Dispatch 和 EnsureDispatch 都会发生这种情况。我还浏览了 makepy 生成的模块,并尝试调度其中提供的每个不同的 CLSID - 无济于事。

有人知道问题可能是什么吗?非常感谢您的帮助!

谢谢!

【问题讨论】:

    标签: python com


    【解决方案1】:

    你确定你实例化了类(但不是接口)。用谷歌搜索 uid {9C7CCB46-E9E8-4DDD-9784-4458877C2F10} 我得到了 ServerEsignal - 它看起来像接口(IESignal)

    【讨论】:

    • 感谢您的回复。是的,我尝试了模块中使用的所有不同的 CLSID,但不幸的是没有成功。我在某处读到我可能需要 IDispatch 或类似的东西???
    • IDispatch 是一个接口,但你需要一个类。一些类实例可以实现多个接口。所以你需要一个类实例,从这个开始你已经可以提取 IDispatch 引用了。
    猜你喜欢
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多