2014-01-20 35 views
1

我有用C#編寫的COM對象。在某些情況下,如果遇到錯誤(例如throw new Exception("error message")),COM對象可能會拋出帶有描述性消息的Exception。在調用C#COM對象後從C++的HRESULT中檢索錯誤消息

此COM對象從VB6代碼和C++代碼中調用。

從VB6代碼中,我可以使用Err.Message檢索錯誤消息。

在C++中,我得到了System.Exception文檔中指定的HRESULT 0x80131500。

一旦我在C++中有了這個HRESULT,我怎樣才能得到異常(Exception.Message)的錯誤信息,就像VB6中Err.Message返回的信息一樣?

我搜索了網頁,發現了一些使用FormatMessage_com_error的例子,但沒有一個返回我想要的消息。

+0

你試過IErrorInfo嗎?檢查'winerror.h'什麼'HRESULT'定義的設施。我強烈懷疑這是用戶定義的工具,這意味着要求對象。 –

+0

'_com_error'似乎是答案。爲什麼你沒有運氣,很難說,因爲你沒有顯示你的代碼。 –

+0

@ Cheersandhth.-Alf'_com_error'依賴於'IErrorInfo'。 –

回答

1

已更新。

嘗試QueryInterface接口的失敗對象,然後調用InterfaceSupportsErrorInfo方法,接口的REFIID引發異常。如果它返回S_OK,則只需調用GetErrorInfo函數即可獲得IErrorInfo接口。然後使用GetDescription方法。

+0

僅僅調用'GetErrorInfo'就足夠了嗎? –

+0

@DavidHeffernan也許。將更新。 – manuell

+0

謝謝@manuell的幫助。你讓我走在正確的軌道上。我設法在[MSDN]上找到一個工作示例(http://msdn.microsoft.com/en-us/library/windows/desktop/ms721141(v = vs.85).aspx)。現在一切正常! – ghigad