共用方式為


C6217

警告 C6217: 語意不相同的整數型別之間發生隱含轉型: 以 'not' 測試 HRESULT。請考慮改用 SUCCEEDEDFAILED 巨集。

這項警告表示 HRESULT 是以 not (!) 運算子進行測試。HRESULT 中的成功 (S_OK) 是以 0 值表示。不過,0 表示布林型別的失敗。以 not 運算子 (!) 測試 HRESULT,決定執行哪個程式碼區塊會造成下列錯誤的程式碼路徑。這將會導致不想要的結果。

範例

下列程式碼會產生這項警告,因為 not 運算子是用於決定 HRESULT 值的成功或失敗。在此情況下,由於 ( !hr ) 會執行失敗程式碼,所以會執行錯誤的程式碼路徑:

#include <windows.h>
#include <objbase.h>

void f( )
{
  HRESULT hr = CoInitialize(NULL); 
  if (!hr)
  {
    // failure code ...
  }
  else
  {
    // success code ...
  }
}

為了要修正這項警告,下列程式碼會使用 FAILED 巨集尋找失敗:

#include <windows.h>
#include <objbase.h>

void f( )
{
  HRESULT hr = CoInitialize(NULL);  
  if (FAILED(hr))
  {
    // failure code ...
  }
  else
  {
    // success code ...
  }
}

在這個警告中,SCODE 型別相當於 HRESULT。

當測試結果為布林值時,HRESULT (S_OK) 的典型成功值為 false。

若要驗證 HRESULT 是否成功,請改用 SUCCEEDED 巨集。