我有一个程序
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 通道(在创建时发生,所以如果它没有运行,你最终会得到一个虚拟对象。
也许 COM 类有一些方法可以强制它重新发现服务器应用程序,而不必重新创建 COM 对象。但是,由于重新创建很容易,因此开发人员很可能认为这样的功能不会为产品增加足够的价值来证明费用的合理性。
一些 COM 类实现了某种单例模式:多次调用Dispatch
将在内部使用第一个结果的"缓存"结果,并实际返回以某种方式"相同"的对象。如果是这种情况,只是再次打电话给Dispatch
也无济于事。在这种情况下,请与 COM 类的文档和/或其供应商联系,了解如何强制重新发现。(例如,可能有一种方法可以显式删除"缓存"底层对象,以便下一个Dispatch
创建一个新对象。