警告 C6226:语义不同的整数类型之间的隐式强制转换: 将 -1 赋给 HRESULT。应考虑改用 E_FAIL。
此警告指示将显式值 -1 分配给了 HRESULT,或用该值对它进行了初始化。此警告通常是由于意外混淆了整数类型与 HRESULT 类型而引起的。要指示成功,应使用符号常数 S_OK。若要指示失败,应使用以 E_constant 开头的符号常数。
示例
下面的代码生成此警告:
#include <windows.h>
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (FAILED(CoGetMalloc(1, &pMalloc)))
{
hr = -1;
// code ...
}
else
{
// code ...
}
}
若要更正此警告,请使用下面的代码:
#include <windows.h>
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (FAILED(CoGetMalloc(1, &pMalloc)))
{
hr = E_FAIL;
// code ...
}
else
{
// code ...
}
}
对于此警告,SCODE 类型等效于 HRESULT。
请注意使用 malloc 和free (相关的动态内存分配 API)在内存泄漏和异常方面具有很多缺陷。若要完全避免这些泄漏和异常问题,请使用 C++ 标准模板库 (STL) 提供的结构。这些包括shared_ptr, unique_ptr, 和 vector有关更多信息,请参见智能指针(现代 C++)和C++ 标准库参考。