C6230
Предупреждение C6230: неявное приведение между семантически различными целочисленными типами: использование HRESULT в логическом контексте.
Данное предупреждение означает, что обычное значение HRESULT используется в контексте (например, в операторе if ), в котором требовался логический результат.Это, скорее всего, приведет к неверным результатам.Например, при проверке обычного значения успеха HRESULT (S_OK) в качестве логического значения возвращается значение "false".
Пример
Данное предупреждение создается в следующем коде:
#include <windows.h>
VOID f( )
{
LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);
if (hr)
{
// code ...
}
else
{
// code ...
}
}
В большинстве случаев макросы SUCCEEDED или FAILED должны использоваться для тестирования значения HRESULT.Для устранения этого предупреждения используйте следующий код:
#include <windows.h>
VOID f( )
{
LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// code ...
}
else
{
// code ...
}
}
Для данного предупреждения тип SCODE эквивалентен типу HRESULT.
Обратите внимание, что использование malloc и free (и связанных динамических API выделения памяти) имеет много опасностей в терминах утечки памяти и исключений.Чтобы избежать все такие проблемы утечек и исключений, используйте механизмы, предоставляемые библиотекой стандартных шаблонов (STL) C++.Они включают shared_ptr, unique_ptr и vector.Дополнительные сведения см. в разделах Интеллектуальные указатели (современный C++) и Справочник по стандартной библиотеке C++.