錯誤處理策略
因為介面方法是虛擬的,所以呼叫端不可能知道可能從任何一個呼叫傳回的完整值集。 方法的一個實作可能會傳回五個值;另一個可能會傳回八個。
檔會列出可能針對每個方法傳回的常見值;這些是您必須在程式代碼中檢查和處理的值,因為它們具有特殊意義。 可能會傳回其他值,但由於這些值沒有意義,因此您不需要撰寫特殊程式代碼來處理它們。 對零或非零的簡單檢查就足夠了。
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 命令會傳回錯誤描述:「指定的網域不存在」。