python - 在 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 注册表编辑器中列出的那些。
我知道问题的描述可能非常模糊,但我希望这是众所周知的问题,我在这里缺少一些基础知识。
解决方案
在花了一些时间之后,我终于发现了问题所在。我试图实例化的类 Signal 既没有在 x86 也没有在 x64 Windows 注册表中注册,这是一回事,这让我深入研究了类定义的细节。在 OLE/COM Object Viewer 的帮助下,我发现这个类有属性 [noncreatable],所以它不能被自己实例化。您不能在顶层创建此类的新对象,即通过调用 Win32com.clinet.Dispatch 正在执行的 CreateInstance 或 CoCreateInstance。此类对象的实例化需要对另一个对象进行方法调用。我从同一个库中实例化了另一个对象,并运行它的一个方法,该方法将接口返回到我需要的类。拥有指向 ISignal 的指针就很容易使用它的所有方法。
谢谢
推荐阅读
- python - 如何在 Python Tkinter 中将画布的宽度设置为屏幕的宽度?
- c - 如何在C中分组反转数组
- javascript - JSON数组里面的JSON数组,,,
- c - 使用 clang 编译最小的测试共享库
- angular - Angular Routing 没有导航到子路由
- symfony - 我的谷歌地图只有在我刷新我的页面时才会显示?第一次怎么显示?
- c++ - 如何正确使用 std::function 作为谓词
- azure - Windows 虚拟桌面为什么需要将 AD 同步到 Azure AD
- git - 分支未正确合并到 Git 中的 master 中
- javascript - 在滚动页面上淡出 - 背景 div