无法在Python中调度COM对象
我正在尝试从一个叫做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)。