2010-05-26 83 views
5

任何人都可以提供有關如何以編程方式將HRESULT(http://en.wikipedia.org/wiki/HRESULT)值轉換爲人類可讀消息的信息嗎?將HRESULT轉換爲可讀消息

我知道實用程序ERR.EXE可以做到這一點,但我的應用程序需要向用戶顯示一些有意義的消息,而不是一個神祕的0x800A03EC。

+0

我在這裏錯過了什麼嗎?爲什麼不能使用'Try ... Catch'並向用戶顯示錯誤信息? – 2010-05-26 15:19:16

+0

@Otaku,我正在進行Excel VSTO調用,其中一些調用會在失敗時返回HRESULT,而在COMException的消息部分中則沒有其他調用。 – code4life 2010-05-26 20:18:37

+0

@ToddMain,因爲保存一個異常ID以便不會立即顯示它是一個好主意。每個班級都不應該知道我是使用GUI還是使用終端,以及它是什麼類型的GUI,因此我無法一次顯示消息。在C++中,我在每個類中都創建了一個變量«LastError»。在C#中這不是一個好主意嗎? – 2014-10-03 15:54:35

回答

3

沒有內置支持從具有該值的HRESULT生成消息。 COM組件需要使用IErrorInfo接口來實現它自己。

.NET中內置的CLR互操作支持已經自動完成了,你永遠不需要幫助。當它看到一個COM接口方法返回一個失敗代碼時它會自動拋出一個適當的異常。 Message屬性從IErrorInfo初始化。如果你沒有任何象樣的消息,那麼COM服務器就不提供它。

這可能是0x800a03ec,它是一個帶有許多錯誤原因的抓包低級別Excel錯誤。您可以通過使用Google搜索「excel error 1004」找到大量點擊。

+0

但也許有可能用自定義HRESULT再次拋出異常?這樣,例外情況就會有一條信息消息等。 – 2014-10-03 16:02:34

3

您是否試過FormatMessage函數?您可以使用PInvoke機制從C#中使用它。