FAILEDマクロでS_FALSEはひっかからない
10月 7th, 2008 Posted in C++いつもどっちかよくわからなくなるのでメモ的にエントリー。次のコードを実行すると・・・
- TRACE( "S_FALSE Test\n" );
- HRESULT hr = S_FALSE;
- if( FAILED( hr ) ){
- TRACE( "FAILED\n" );
- }else{
- TRACE( "Not FAILED\n" );
- }
- TRACE( "E_FAIL Test\n" );
- hr = E_FAIL;
- if( FAILED( hr ) ){
- TRACE( "FAILED\n" );
- }else{
- TRACE( "Not FAILED\n" );
- }
次のように出力される。
- S_FALSE Test
- Not FAILED
- E_FAIL Test
- FAILED
なぜなら、FAILEDやSUCCEEDEDは次のように定義してあって、
- #define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)
- #define FAILED(Status) ((HRESULT)(Status)<0)
S_OK,S_FALSE,E_FAILは次のように定義してあるから。
- #define S_OK ((HRESULT)0x00000000L)
- #define S_FALSE ((HRESULT)0x00000001L)
- #define E_FAIL _HRESULT_TYPEDEF_(0x80000008L)
こちらもオススメ!