處理未知的錯誤
只有在實作已獲批准為合法可傳回的介面方法時,才傳回狀態代碼是合法的。 如果無法觀察此規則,會邀請傳回的錯誤碼值與應用程式批准的值之間可能發生衝突。 從內部呼叫的函式傳播錯誤碼時,請特別注意此潛在問題。
呼叫介面的應用程式應將任何未知傳回的錯誤碼(而不是成功碼)視為與E_UNEXPECTED同義。 COM 定義介面和函式的用戶端需要處理未知錯誤碼的這種做法。 由於典型的程式設計做法是詳細處理幾個特定的錯誤碼,並以一般方式處理其餘錯誤碼,因此很容易符合處理非預期或未知的錯誤碼需求。
呼叫介面方法時,請務必處理所有可能的錯誤。 若無法這麼做,可能會導致應用程式損毀、數據損毀,或容易遭受安全性惡意探索。 下列程式代碼範例顯示處理未知錯誤的建議方式:
HRESULT hr;
hr = xxMethod();
switch (GetScode(hr))
{
case NOERROR:
// Method returned success.
break;
case x1:
// Handle error x1 here.
break;
case x2:
// Handle error x2 here.
break;
case E_UNEXPECTED:
default:
// Handle unexpected errors here.
break;
}
下列錯誤檢查通常與不會傳回任何特殊專案的例程搭配使用(除了S_OK或某些未預期的錯誤外):
if (xxMethod() == NOERROR)
{
// Handle success here.
}
else
{
// Handle failure here.
}
相關主題