python - 即使我启动服务器应用程序,COM 对象仍会返回一个 stub

标签 python win32com

我有一个程序

 repo = win32com.client.Dispatch("EA.App").Repository

而且一直都很好用。但是,一旦我在 EA.app 实例未运行时调用它,我就会永久收到垃圾

<COMObject <unknown>>

作为返回 - 直到我重新启动 Windoze。那是什么?更重要的是:如何绕过重启?

附言写完后我发现

 repo = win32com.client.Dispatch("EA.App")

返回

<COMObject EA.App>

那么,我可以假设这是 EA.app 做错了什么吗?

最佳答案

win32com.client.Dispatch("EA.App") 创建 EA.App COM 类的新实例。

我假设在创建时将 COM 对象连接到“EA.app 实例”或其他任何东西(大概通过 IPC channel ),所以如果它没有运行,你最终会得到一个虚拟对象仍然如此。

也许 COM 类有一些方法可以强制它重新发现服务器应用程序,而不必重新创建 COM 对象。但由于重新创建很容易,开发人员很可能认为这样的功能不会为产品增加足够的值(value)以证明支出是合理的。


一些 COM 类实现了某种 singleton pattern : 多次调用 Dispatch 将在内部使用第一个结果的“缓存”结果,并实际返回某种程度上“相同”的对象。如果是这种情况,再次调用 Dispatch 将无济于事。在这种情况下,请检查 COM 类的文档和/或其供应商如何强制重新发现。 (例如,可能有一种方法可以显式删除“缓存的”底层对象,以便下一个 Dispatch 创建一个新对象。)

关于python - 即使我启动服务器应用程序,COM 对象仍会返回一个 stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58105184/

相关文章:

python - PyQt5 项目结构和 PyInstaller ModuleNotFoundError

python - Python3-ModuleNotFoundError : No module named 'numpy'

python - 将东西放入新的函数属性中是不好的做法吗?

python-3.x - 找不到 win32com 模块

python - pyttsx3:无法设置指定的语言

python - 执行 Union-Find,得到 TypeError : 'builtin_function_or_method' object is not subscriptable

python - 如何使用 Python 以编程方式设置 Excel 敏感度标签?

excel - 如何通过使用 "win32com.client as win32"知道excel的使用行数和列数

excel - 使用 Python 和 win32com 访问 Excel COM 中的枚举常量

Python 2.7 - Outlook Win32com.client 无法从 .msg 获取发件人的实际电子邮件地址