无法在Python中调度COM对象

1 投票
1 回答
2417 浏览
提问于 2025-04-17 07:44

我正在尝试从一个叫做eSignal的数据提供商那里获取交易价格。在他们的开发者页面上有一些示例(链接),我可以很容易地在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,但都没有成功。

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

谢谢!

1 个回答

1

你确定你是在创建一个类的实例,而不是接口吗?我在网上搜索了这个 uid {9C7CCB46-E9E8-4DDD-9784-4458877C2F10},发现了 ServerEsignal,看起来它是一个接口(IESignal)。

撰写回答