COM介面傳回值HRESULT處理 及 錯誤查詢

來源:互聯網
上載者:User
從COM方法返回的HRESULT是個32位符號整數,其非負值表示成功,負值表示失敗。HRESULT有三個域:程度位(表示成功或失敗),功能碼和狀態代碼。功能碼錶示HRESULT來自什麼組件或程式。微軟給不同的組件多賦予功能碼,如:COM、任務發送器等都有功能碼。功能碼是個16位的值,僅此而已,沒有其它內在含義;它在數字和意義之間是隨意關聯的;類似GetLastError()返回的值。
  如果你在winerror.h標頭檔中尋找錯誤碼,會看到許多按照[功能]_[程度]_[描述]命名規範列出的HRESULT值,由組件返回的通用的HRESULT(類似E_OUTOFMEMORY)在名字中沒有功能碼。如 :

REGDB_E_READREGDB:
功能碼 = REGDB, 指“註冊表資料庫(registry database)”;
程度 = E 意思是錯誤(error);
描述 = READREGDB 是對錯誤的描述(意思是不能讀註冊表資料庫)。 S_OK: 沒有功能碼——通用(generic)
HRESULT;
程度=S;表示成功(success);
OK 是狀態原因表示一切都好(everything''s OK)。

1. Error Lookup工具
      使用VC提供的錯誤尋找工具(Error Lookup)可以輕鬆查到為HRESULT內建功能碼。例如,假設你在CoCreateInstance()之前忘了調用CoInitialize()。CoCreateInstance()返回的值是0x800401F0。你只要將這個值輸入到錯誤尋找工具按“Look Up”按鈕,便可以看到錯誤資訊描述“尚未調用CoInitialize”如所示:

2.Watch視窗查詢:
      另外一種尋找HRESULT描述的方法是在調試器中。假設有一個HRESULT變數是hres。在Watch視窗的左邊框中輸入“hres,hr”,表示想要看的值,“hr”便會通知VC顯示HRESULT所描述的值。如所示:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.