WindowsプログラマのWebアプリへの挑戦日記。あとパンとか。

FAILEDマクロでS_FALSEはひっかからない

10月 7th, 2008 Posted in C++

いつもどっちかよくわからなくなるのでメモ的にエントリー。次のコードを実行すると・・・

  1. TRACE( "S_FALSE Test\n" );
  2. HRESULT hr = S_FALSE;
  3. if( FAILED( hr ) ){
  4.     TRACE( "FAILED\n" );
  5. }else{
  6.     TRACE( "Not FAILED\n" );
  7. }
  8.  
  9. TRACE( "E_FAIL Test\n" );
  10. hr = E_FAIL;
  11. if( FAILED( hr ) ){
  12.     TRACE( "FAILED\n" );
  13. }else{
  14.     TRACE( "Not FAILED\n" );
  15. }

次のように出力される。

  1. S_FALSE Test
  2. Not FAILED
  3. E_FAIL Test
  4. FAILED

なぜなら、FAILEDやSUCCEEDEDは次のように定義してあって、

  1. #define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)
  2. #define FAILED(Status) ((HRESULT)(Status)<0)

S_OK,S_FALSE,E_FAILは次のように定義してあるから。

  1. #define S_OK        ((HRESULT)0x00000000L)
  2. #define S_FALSE     ((HRESULT)0x00000001L)
  3. #define E_FAIL      _HRESULT_TYPEDEF_(0x80000008L)
こちらもオススメ!

Trackback URL

Post a Comment