HRESULT返回值說(shuō)明 如果函數(shù)正常執(zhí)行,則返回 S_OK,同時(shí)真正的函數(shù)運(yùn)行結(jié)果則通過(guò)參數(shù)指針?lè)祷亍H绻龅搅水惓G闆r,則COM系統(tǒng)經(jīng)過(guò)判斷,會(huì)返回相應(yīng)的錯(cuò)誤值。

          HRESULT         值          含義
          S_OK            0x00000000  成功
          S_FALSE         0x00000001  函數(shù)成功執(zhí)行完成,但返回時(shí)出現(xiàn)錯(cuò)誤
          E_INVALIDARG    0x80070057  參數(shù)有錯(cuò)誤
          E_OUTOFMEMORY   0x8007000E  內(nèi)存申請(qǐng)錯(cuò)誤
          E_UNEXPECTED    0x8000FFFF  未知的異常
          E_NOTIMPL       0x80004001  未實(shí)現(xiàn)功能
          E_FAIL          0x80004005  沒(méi)有詳細(xì)說(shuō)明的錯(cuò)誤。一般需要取得 Rich Error 錯(cuò)誤信息(注1)
          E_POINTER       0x80004003  無(wú)效的指針
          E_HANDLE        0x80070006  無(wú)效的句柄
          E_ABORT         0x80004004  終止操作
          E_ACCESSDENIED  0x80070005  訪問(wèn)被拒絕
          E_NOINTERFACE   0x80004002  不支持接口

          HRESULT 其實(shí)是一個(gè)雙字節(jié)的值,其最高位(bit)如果是0表示成功,1表示錯(cuò)誤。具體參見(jiàn) MSDN 之"Structure of COM Error Codes"說(shuō)明。我們?cè)诔绦蛑腥绻枰袛喾祷刂担瑒t可以使用比較運(yùn)算符號(hào);switch開(kāi)關(guān)語(yǔ)句;也可以使用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 錯(cuò)誤
          自定義標(biāo)記(29) 反映結(jié)果是否為自定義標(biāo)識(shí),1 為是,0 則不是;
          操作碼 (16-28) 標(biāo)識(shí)結(jié)果操作來(lái)源,在 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ù)沒(méi)有被實(shí)現(xiàn)
                          E_NOTINTERFACE  函數(shù)執(zhí)行失敗,組件沒(méi)有實(shí)現(xiàn)指定的接口

          不能簡(jiǎn)單地把返回值與 S_OK 和 S_FALSE 比較,而要用 SECCEEDED 和 FAILED 宏進(jìn)行判斷。

          posted on 2010-01-04 10:00 -274°C 閱讀(6131) 評(píng)論(0)  編輯  收藏 所屬分類: C++

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊(cè)

          JAVA網(wǎng)站

          關(guān)注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 914965
          • 排名 - 40

          最新評(píng)論

          主站蜘蛛池模板: 诸城市| 盱眙县| 建德市| 莱阳市| 莲花县| 巴彦淖尔市| 沐川县| 克山县| 樟树市| 江川县| 安塞县| 和平区| 读书| 秀山| 和硕县| 张家川| 汶川县| 玉林市| 晋江市| 秦安县| 毕节市| 旌德县| 黔南| 宁津县| 民勤县| 姜堰市| 永德县| 扬中市| 格尔木市| 高雄县| 丰顺县| 泾阳县| 南汇区| 双桥区| 淳化县| 达孜县| 康定县| 招远市| 琼海市| 隆安县| 嵊泗县|