在已发布的COM对象上调用调用

问题描述:

我创建了一个用于某些应用程序的自动化任务的COM对象。发生这种情况时,应用程序启动并显示其“主窗口”。在已发布的COM对象上调用调用

用户关闭主应用程序窗口时会出现问题。下一个调用COM对象的调用不起作用。问题是它不会失败,并且不会报告错误。如果我在下一行代码中放置一个调试器断点,它永远不会到达。如果我用try/catch包围Invoke调用,则不会发生异常。在发布版本中,它只是崩溃。

这应该如何工作?由于我使用CComDispatchDriver作为IDispatch *的包装,我期望即使用户关闭了应用程序,我的AddRef也会使COM对象保持活动状态。我希望至少得到一些HRESULT作为错误。

+0

显然你正在处理一个cr * ppy COM服务器。它应该继续运行并抽取消息循环,直到您释放应用程序对象。你最好回应某种“退出”事件。如果没有一个,那么你需要供应商的支持。 –

+0

没有事件。由于这是超出proc调用,是否期望Invoke在找不到目标消息循环时返回一个错误? – bombardier

+0

COM存根非常薄,没有超时。联系供应商,您不能成为唯一有此问题的人。 –

可能发生的情况是您的应用程序在退出时称为CoUninitialize。 CoUninitialize会导致所有的COM对象被丢弃,因此如果你在调用CoUninitialize之后与COM对象进行交互,你将会崩溃。