HRESULT返回值說明 如果函數正常執行,則返回 S_OK,同時真正的函數運行結果則通過參數指針返回。如果遇到了異常情況,則COM系統經過判斷,會返回相應的錯誤值。

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

          HRESULT 其實是一個雙字節的值,其最高位(bit)如果是0表示成功,1表示錯誤。具體參見 MSDN 之"Structure of COM Error Codes"說明。我們在程序中如果需要判斷返回值,則可以使用比較運算符號;switch開關語句;也可以使用VC提供的宏:
               HRESULT hr = 調用組件函數;
                if( SUCCEEDED( hr ) ){...} // 如果成功
                ......
                if( FAILED( hr ) ){...} // 如果失敗
                ......

          大多數 COM 函數以及一些接口成員函數的返回值類型均為 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 宏進行判斷。

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

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 917240
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 乳源| 瓦房店市| 江安县| 濮阳市| 上高县| 阿拉尔市| 沁阳市| 云浮市| 运城市| 德安县| 乌苏市| 丰原市| 晋城| 鸡泽县| 乌拉特后旗| 康马县| 离岛区| 宽城| 河间市| 门头沟区| 伊宁市| 柏乡县| 平乐县| 酒泉市| 封开县| 辽宁省| 股票| 牟定县| 丹阳市| 淳化县| 新泰市| 隆子县| 崇明县| 乌鲁木齐县| 新乡县| 荥经县| 大城县| 枣庄市| 应用必备| 汶上县| 老河口市|