原型如下:
成都創(chuàng)新互聯(lián)主要業(yè)務(wù)有網(wǎng)站營(yíng)銷策劃、做網(wǎng)站、網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、小程序制作、H5場(chǎng)景定制、程序開發(fā)等業(yè)務(wù)。一次合作終身朋友,是我們奉行的宗旨;我們不僅僅把客戶當(dāng)客戶,還把客戶視為我們的合作伙伴,在開展業(yè)務(wù)的過(guò)程中,公司還積累了豐富的行業(yè)經(jīng)驗(yàn)、營(yíng)銷型網(wǎng)站建設(shè)資源和合作伙伴關(guān)系資源,并逐漸建立起規(guī)范的客戶服務(wù)和保障體系。BOOL SUCCEEDED( HRESULT hr );
對(duì)應(yīng)的定義(具體的實(shí)現(xiàn)):#define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0)
原型如下:
BOOL FAILED( HRESULT hr );
對(duì)應(yīng)的定義(具體的實(shí)現(xiàn)):#define FAILED(hr) (((HRESULT)(hr)) < 0)
注意:
使用這兩個(gè)宏來(lái)對(duì)COM組件的返回值HRESULT進(jìn)行判斷;
因?yàn)镠RESULT值為返回狀態(tài),失敗的情況下有很多種狀態(tài),所以不能直接判斷
如果函數(shù)正常執(zhí)行,則返回S_OK,同時(shí)真正的函數(shù)運(yùn)行結(jié)果則通過(guò)參數(shù)指針?lè)祷?。如果遇到了異常情況,則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ò)誤。具體參見 MSDN 之"Structure of COM Error Codes"說(shuō)明。我們?cè)诔绦蛑腥绻枰袛喾祷刂?,則可以使用比較運(yùn)算符號(hào);switch開關(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)行判斷
FAILED和SUCCEEDED是windows中定義的宏函數(shù),而S_OK只是一個(gè)特定的值。
#define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)
#define FAILED(Status) ((HRESULT)(Status) <0)
成功的代碼有多個(gè),失敗的代碼也有多個(gè)一個(gè)函數(shù)在各種情況下返回的狀態(tài)代碼通常將包含多個(gè)成功代碼及多個(gè)失敗代碼。
這就是我們?yōu)槭裁匆褂肧UCCEEDED及FAILED宏的原因。一般不能直接將HRESULT值同某個(gè)成功代碼(如S_OK)進(jìn)行比較以決定某個(gè)函數(shù)是否成功。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。