共用方式為


處理未知的錯誤

只有在實作已獲批准為合法可傳回的介面方法時,才傳回狀態代碼是合法的。 如果無法觀察此規則,會邀請傳回的錯誤碼值與應用程式批准的值之間可能發生衝突。 從內部呼叫的函式傳播錯誤碼時,請特別注意此潛在問題。

呼叫介面的應用程式應將任何未知傳回的錯誤碼(而不是成功碼)視為與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.
} 

COM 中的錯誤處理