C6225

更新:2007 年 11 月

警告 C6225:语义不同的整数类型之间的隐式强制转换: 将 1 或 TRUE 赋给 HRESULT。应考虑改用 S_FALSE

此警告意味着将显式值 1 分配给了 HRESULT 或用该值对它进行了初始化。布尔类型通过非零值指示成功;HRESULT 中的成功 (S_OK) 则是通过值 0 指示的。此警告通常是由于意外混淆了布尔类型与 HRESULT 类型而引起的。要指示成功,应使用符号常数 S_OK。

示例

在下面的代码中,HRESULT 的赋值生成此警告:

#include <windows.h>

VOID f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  if (SUCCEEDED(CoGetMalloc(1, &pMalloc)))
  {
    // code ...
    hr = S_OK;  
  }
  else
  {
    // code ...
    hr = 1;
  }
}

若要更正此警告,请使用下面的代码:

VOID f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  if (SUCCEEDED(CoGetMalloc(1, &pMalloc)))
  {
    hr = S_OK;
    // code ...
  }
  else
  {
    hr = S_FALSE;
    // code ...
  }
}

对于此警告,SCODE 类型等效于 HRESULT。

若要指示失败,应使用 E_FAIL 或另一个常数。

请参见

其他资源

SUCCEEDED

FAILED