摘自:http://hi.baidu.com/hankcs/blog/item/7a5cc2080b8a2cc43ac76342.html
簡單地說,就是判斷函數執行結果。
COM要求所有的方法都會返回一個HRESULT類型的錯誤號碼。HRESULT 其實就一個類型定義:
typedef LONG HRESULT;
HRESULT 類型的傳回值反映了函數中的一些情況,其類型定義規範如下:
31 30 29 28 16 15 0
|-----|--|------------------------|-----------------------------------|類別碼 (30-31) 反映函數調用結果:
00 調用成功
01 包含一些資訊
10 警告
11 錯誤
自訂標籤(29) 反映結果是否為自訂標識,1 為是,0 則不是;
作業碼 (16-28) 標識結果操作來源,在 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
操作結果碼(0-15) 反映操作的狀態,WinError.h 定義了 Win32 函數所有可能返回結果。
以下是一些經常用到的傳回值和宏定義:
S_OK 函數執行成功,其值為 0 (注意,其值與 TRUE 相反)
S_FALSE 函數執行成功,其值為 1
S_FAIL 函數執行失敗,失敗原因不確定
E_OUTOFMEMORY 函數執行失敗,失敗原因為記憶體配置不成功
E_NOTIMPL 函數執行失敗,成員函數沒有被實現
E_NOTINTERFACE 函數執行失敗,組件沒有實現指定的介面不能簡單地把傳回值與 S_OK 和 S_FALSE 比較,而要用 SECCEEDED 和 FAILED 宏進行判斷。