2011-09-23 33 views
3

我創建了一個用於某些應用程序的自動化任務的COM對象。發生這種情況時,應用程序啓動並顯示其「主窗口」。在已發佈的COM對象上調用調用

用戶關閉主應用程序窗口時會出現問題。下一個調用COM對象的調用不起作用。問題是它不會失敗,並且不會報告錯誤。如果我在下一行代碼中放置一個調試器斷點,它永遠不會到達。如果我用try/catch包圍Invoke調用,則不會發生異常。在發佈版本中,它只是崩潰。

這應該如何工作?由於我使用CComDispatchDriver作爲IDispatch *的包裝,我期望即使用戶關閉了應用程序,我的AddRef也會使COM對象保持活動狀態。我希望至少得到一些HRESULT作爲錯誤。

+0

顯然你正在處理一個cr * ppy COM服務器。它應該繼續運行並抽取消息循環,直到您釋放應用程序對象。你最好迴應某種「退出」事件。如果沒有一個,那麼你需要供應商的支持。 –

+0

沒有事件。由於這是超出proc調用,是否期望Invoke在找不到目標消息循環時返回一個錯誤? – bombardier

+0

COM存根非常薄,沒有超時。聯繫供應商,您不能成爲唯一有此問題的人。 –

回答

0

可能發生的情況是您的應用程序在退出時稱爲CoUninitialize。 CoUninitialize會導致所有的COM對象被丟棄,因此如果你在調用CoUninitialize之後與COM對象進行交互,你將會崩潰。