首页 > 解决方案 > 在 Python 中通过 win32com 使用 COM 对象

问题描述

我正在尝试使用 win32com.client 从 COM 库中分派一个名为 Signal 的类。不幸的是,我收到了无效类字符串的错误。COM 库已注册,当在 Visual Basic for Application 中引用时,类 Signal 是可见的并且可以实例化 VBA Signal 类但是,该类未在 Register Editor Windows Register Editor 中明确列出 当使用 make.py 重新编译 COM 库时,该类可以在其他类中找到其 IID 和接口。

是否可以使用类似于 VBA 的 win32client 在 python 中实例化此类?

我试图通过其 IID 分派该类,但没有成功。我可以访问的唯一类是 Windows 注册表编辑器中列出的那些。

我知道问题的描述可能非常模糊,但我希望这是众所周知的问题,我在这里缺少一些基础知识。

标签: pythonvbaobjectcom

解决方案


在花了一些时间之后,我终于发现了问题所在。我试图实例化的类 Signal 既没有在 x86 也没有在 x64 Windows 注册表中注册,这是一回事,这让我深入研究了类定义的细节。在 OLE/COM Object Viewer 的帮助下,我发现这个类有属性 [noncreatable],所以它不能被自己实例化。您不能在顶层创建此类的新对象,即通过调用 Win32com.clinet.Dispatch 正在执行的 CreateInstance 或 CoCreateInstance。此类对象的实例化需要对另一个对象进行方法调用。我从同一个库中实例化了另一个对象,并运行它的一个方法,该方法将接口返回到我需要的类。拥有指向 ISignal 的指针就很容易使用它的所有方法。

谢谢


推荐阅读