【轉(zhuǎn)載】hlw3330219博客
簡(jiǎn)單地說巢价,就是判斷函數(shù)執(zhí)行結(jié)果。
COM要求所有的方法都會(huì)返回一個(gè)HRESULT類型的錯(cuò)誤號(hào)。HRESULT 其實(shí)就一個(gè)類型定義:
typedef LONG HRESULT;
HRESULT 類型的返回值反映了函數(shù)中的一些情況贝或,其類型定義規(guī)范如下:
31 30 29 28??????????????????? 16 15??????????????????????????????? 0
|-----|--|------------------------|-----------------------------------|
類別碼 (30-31) 反映函數(shù)調(diào)用結(jié)果:
00 調(diào)用成功
01 包含一些信息
10 警告
11 錯(cuò)誤
自定義標(biāo)記(29) 反映結(jié)果是否為自定義標(biāo)識(shí)吼过,1 為是,0 則不是咪奖;
操作碼 (16-28) 標(biāo)識(shí)結(jié)果操作來源盗忱,在 Windows 平臺(tái)上,其定義如下:
#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í)行失敗料身,失敗原因?yàn)閮?nèi)存分配不成功
E_NOTIMPL?????? 函數(shù)執(zhí)行失敗汤纸,成員函數(shù)沒有被實(shí)現(xiàn)
E_NOTINTERFACE 函數(shù)執(zhí)行失敗,組件沒有實(shí)現(xiàn)指定的接口
不能簡(jiǎn)單地把返回值與 S_OK 和 S_FALSE 比較芹血,而要用 SECCEEDED 和 FAILED 宏進(jìn)行判斷贮泞。