【发布时间】:2021-06-24 20:39:41
【问题描述】:
我正在尝试使用 win32com.client 从 COM 库中分派一个名为 Signal 的类。不幸的是,我收到了无效类字符串的错误。 COM 库已注册,当在 Visual Basic for Application 中引用时,类 Signal 是可见的并且可以实例化 VBA Signal class 但是,注册编辑器Windows Register Editor 中未明确列出该类 使用 make.py 重新编译 COM 库时,可以在其他类中找到具有其 IID 和接口的类。
是否可以使用类似于 VBA 的 win32client 在 python 中实例化此类?
我尝试通过 IID 分派该类,但没有成功。我可以访问的唯一类是 Windows 注册表编辑器中列出的那些。
我知道问题的描述可能很模糊,但我希望这是众所周知的问题,我在这里缺少一些基础知识。
【问题讨论】:
-
您通过其 CLSID 而不是 IID 实例化一个类。这可能只是一个误会。对于一种普通的 COM 类,您可以实例化的类将被定义为类型库中的 [coclass],并且类定义通常会列出它实现的默认接口。对于名为“Rock”的示例类,将有一个用于 Rock 的 coclass 定义,并且可能有一个名为 _Rock 或 IRock 的接口。您为 Rock 对象使用 CoCreateInstance(),但查询接口并调用 _Rock 或 IRock 接口上的方法。因此,使用 Python 创建 Signal 类,而不是接口。
-
IID 用于接口,CLSID 用于对象。这些条款确实被松散地抛出了很多。两者都是 GUID。您创建了一个 Word.Document (CLSID = {F4754C9B-64F5-4B40-8AF4-679732AC0607}),但收到了 _Document (IID = {0002096B-0000-0000-C000-000000000046} ) 接口并在其上调用方法。跨度>