警告 C6230:语义不同的整数类型之间的隐式强制转换: 在 Boolean 上下文中使用 HRESULT
此警告意味着在HRESULT上下文中使用了 bare 。如 if 语句,应当使用布尔值结果这有可能会产生不正确的结果。例如,在作为布尔值测试时,HRESULT 的典型成功值 (S_OK) 是 false。
示例
下面的代码生成此警告:
#include <windows.h>
VOID f( )
{
LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);
if (hr)
{
// code ...
}
else
{
// code ...
}
}
在大多数情况下,已成功 应当使用或 失败 宏来测试 HRESULT的值。若要更正此警告,请使用下面的代码:
#include <windows.h>
VOID f( )
{
LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// code ...
}
else
{
// code ...
}
}
对于此警告,SCODE 类型等效于 HRESULT。
请注意使用 malloc 和free (相关的动态内存分配 API)在内存泄漏和异常方面具有很多缺陷。若要完全避免这些泄漏和异常问题,请使用 C++ 标准模板库 (STL) 提供的结构。这些包括shared_ptr, unique_ptr, 和 vector有关更多信息,请参见智能指针(现代 C++)和C++ 标准库参考。