HRESULT返回值说明
From: http://www.blogjava.net/JAVA-HE/archive/2010/01/04/308134.html
HRESULT返回值說明 如果函數(shù)正常執(zhí)行,則返回 S_OK,同時真正的函數(shù)運行結(jié)果則通過參數(shù)指針返回。如果遇到了異常情況,則COM系統(tǒng)經(jīng)過判斷,會返回相應(yīng)的錯誤值。
HRESULT???????? 值????????? 含義
S_OK??????????? 0x00000000? 成功
S_FALSE???????? 0x00000001? 函數(shù)成功執(zhí)行完成,但返回時出現(xiàn)錯誤
E_INVALIDARG??? 0x80070057? 參數(shù)有錯誤
E_OUTOFMEMORY?? 0x8007000E? 內(nèi)存申請錯誤
E_UNEXPECTED??? 0x8000FFFF? 未知的異常
E_NOTIMPL?????? 0x80004001? 未實現(xiàn)功能
E_FAIL????????? 0x80004005? 沒有詳細(xì)說明的錯誤。一般需要取得 Rich Error 錯誤信息(注1)
E_POINTER?????? 0x80004003? 無效的指針
E_HANDLE??????? 0x80070006? 無效的句柄
E_ABORT???????? 0x80004004? 終止操作
E_ACCESSDENIED? 0x80070005? 訪問被拒絕
E_NOINTERFACE?? 0x80004002? 不支持接口
HRESULT 其實是一個雙字節(jié)的值,其最高位(bit)如果是0表示成功,1表示錯誤。具體參見 MSDN 之"Structure of COM Error Codes"說明。我們在程序中如果需要判斷返回值,則可以使用比較運算符號;switch開關(guān)語句;也可以使用VC提供的宏:
???? HRESULT hr = 調(diào)用組件函數(shù);
????? if( SUCCEEDED( hr ) ){...} // 如果成功
????? ......
????? if( FAILED( hr ) ){...} // 如果失敗
????? ......
大多數(shù) COM 函數(shù)以及一些接口成員函數(shù)的返回值類型均為 HRESULT 類型。HRESULT 類型的返回值反映了函數(shù)中的一些情況,其類型定義規(guī)范如下:
?? 31 30 29 28??????????????????? 16 15??????????????????????????????? 0
? |-----|--|------------------------|-----------------------------------|
類別碼 (30-31) 反映函數(shù)調(diào)用結(jié)果:
??????????????? 00 調(diào)用成功
??????????????? 01 包含一些信息
??????????????? 10 警告
??????????????? 11 錯誤
自定義標(biāo)記(29) 反映結(jié)果是否為自定義標(biāo)識,1 為是,0 則不是;
操作碼 (16-28) 標(biāo)識結(jié)果操作來源,在 Windows 平臺上,其定義如下:
??????????????? #define FACILITY_WINDOWS???????? 8
??????????????? #define FACILITY_STORAGE???????? 3
??????????????? #define FACILITY_RPC???????????? 1
??????????????? #define FACILITY_SSPI??????????? 9
??????????????? #define FACILITY_WIN32?????????? 7
??????????????? #define FACILITY_CONTROL???????? 10
??????????????? #define FACILITY_NULL??????????? 0
??????????????? #define FACILITY_INTERNET??????? 12
??????????????? #define FACILITY_ITF???????????? 4
??????????????? #define FACILITY_DISPATCH??????? 2
??????????????? #define FACILITY_CERT??????????? 11
操作結(jié)果碼(0-15) 反映操作的狀態(tài),WinError.h 定義了 Win32 函數(shù)所有可能返回結(jié)果。
??????????????? 以下是一些經(jīng)常用到的返回值和宏定義:
??????????????? S_OK??????????? 函數(shù)執(zhí)行成功,其值為 0 (注意,其值與 TRUE 相反)
??????????????? S_FALSE???????? 函數(shù)執(zhí)行成功,其值為 1
??????????????? S_FAIL????????? 函數(shù)執(zhí)行失敗,失敗原因不確定
??????????????? E_OUTOFMEMORY?? 函數(shù)執(zhí)行失敗,失敗原因為內(nèi)存分配不成功
??????????????? E_NOTIMPL?????? 函數(shù)執(zhí)行失敗,成員函數(shù)沒有被實現(xiàn)
??????????????? E_NOTINTERFACE? 函數(shù)執(zhí)行失敗,組件沒有實現(xiàn)指定的接口
不能簡單地把返回值與 S_OK 和 S_FALSE 比較,而要用 SECCEEDED 和 FAILED 宏進(jìn)行判斷。
總結(jié)
以上是生活随笔為你收集整理的HRESULT返回值说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AT89C51单片机的8位竞赛抢答器的p
- 下一篇: 虚拟机网络配置详解(NAT、桥接、Hos