錯誤處理策略

因為介面方法是虛擬的,所以呼叫端不可能知道可能從任何一個呼叫傳回的完整值集。 方法的一個實作可能會傳回五個值;另一個可能會傳回八個。

檔會列出可能針對每個方法傳回的常見值;這些是您必須在程式代碼中檢查和處理的值,因為它們具有特殊意義。 可能會傳回其他值,但由於這些值沒有意義,因此您不需要撰寫特殊程式代碼來處理它們。 對零或非零的簡單檢查就足夠了。

HRESULT 值

COM 函式和方法的傳回值是 HRESULT。 COM 中已變更某些 HRESULT 的值,以消除所有重複和與系統錯誤碼重疊的情況。 重複系統錯誤碼的已變更為FACILITY_WIN32,而重疊的錯誤碼會保留在FACILITY_NULL中。 下表列出常見的 HRESULT 值及其值。

HRESULT Description
E_ABORT
0x80004004
作業因為未指定的錯誤而中止。
E_ACCESSDENIED
0x80070005
一般拒絕存取錯誤。
E_FAIL
0x80004005
發生未指定的失敗。
E_HANDLE
0x80070006
使用了無效的句柄。
E_INVALIDARG
0x80070057
一或多個引數無效。
E_NOINTERFACE
0x80004002
QueryInterface 方法無法辨識要求的介面。 不支援 介面。
E_NOTIMPL
0x80004001
未實作 方法。
E_OUTOFMEMORY
0x8007000E
方法無法配置必要的記憶體。
E_PENDING
0x8000000A
尚未提供完成作業所需的數據。
E_POINTER
0x80004003
使用了無效的指標。
E_UNEXPECTED
0x8000FFFF
發生重大失敗。
S_FALSE
0x00000001
方法成功並傳回布爾值 FALSE
S_OK
0x00000000
此方法已成功。 如果預期有布爾值傳回值,則傳回的值為 TRUE

網路錯誤

如果錯誤碼的前四位數是8007,這表示系統或網路錯誤。 您可以使用 net 命令來譯碼這些類型的錯誤。 若要譯碼錯誤,請先將十六進位錯誤碼的最後四位數轉換成十進位。 然後,在命令提示字元中,輸入下列命令,其中十進位程序代碼會取代為您要譯碼的傳回值:

net helpmsg <decimal_code>

net 命令會傳回錯誤的描述。 例如,如果 COM 傳回錯誤 8007054B,請將 054B 轉換為十進位 (1355)。 然後輸入下列命令:

net helpmsg 1355

net 命令會傳回錯誤描述:「指定的網域不存在」。

COM 中的錯誤處理