Python COM对象始终返回存根,即使我启动服务器应用程序也是如此

Python COM对象始终返回存根,即使我启动服务器应用程序也是如此,python,win32com,Python,Win32com,我有一个关于你的计划 repo = win32com.client.Dispatch("EA.App").Repository 这一直都很好。然而,有一次我在EA.app实例没有运行的时候打电话给它,我就得到了垃圾 作为回报-直到我重新启动Windoze。那是什么?更重要的是:如何避免重启 我刚写完信就发现 repo = win32com.client.Dispatch("EA.App") 返回 所以,我可以假设这是EA.app做得不对吗?win32com.client.Dispat

我有一个关于你的计划

 repo = win32com.client.Dispatch("EA.App").Repository
这一直都很好。然而,有一次我在EA.app实例没有运行的时候打电话给它,我就得到了垃圾

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

我刚写完信就发现

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


所以,我可以假设这是EA.app做得不对吗?

win32com.client.Dispatch(“EA.app”)
创建了
EA.app
COM类的新实例

我假设在创建时将COM对象连接到“EA.app instance”或任何东西(可能是通过IPC通道),因此如果它没有运行,您将得到一个保持这种状态的虚拟对象

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



一些COM类实现了某种类型的:多次调用
Dispatch
将在内部使用来自第一个类的“缓存”结果,并实际返回某种程度上“相同”的对象。如果是这种情况,只需再次调用
Dispatch
就没有帮助了。在这种情况下,请与COM类的文档和/或其供应商核实如何强制重新发现。(例如,可能有一种方法可以显式删除“缓存”的基础对象,以便下一次
调度
创建一个新对象。)

谢谢。看来我今晚一睡就得好好想一想:-)我不是Windoze专家,所以深入了解它可能需要一点时间。我会回来的。我想我理解了你上面说的。从他们在EA.App中做的其他奇怪的事情来看,很有可能它被埋藏在EA.App中。我会发送一个bug报告,但是没有太大的希望。