C6219
Warnung C6219: Implizite Umwandlung zwischen semantisch unterschiedlichen Integer-Typen: HRESULT wird mit 1 oder TRUE verglichen. Stattdessen sollten Sie möglicherweise das SUCCEEDED- oder FAILED-Makro verwenden.
Diese Warnung gibt an, dass ein HRESULT mit einem expliziten Wert von 1 verglichen wird, der kein HRESULT ist. Dies kann zu falschen Ergebnissen führen, da der typische Erfolgswert von HRESULT (S_OK) 0 ist; bei einem Vergleich mit einem Boolean-Typ wird er implizit in false umgewandelt.
Beispiel
Der folgende Code generiert diese Warnung, weil CoGetMalloc ein HRESULT zurückgibt, das dann mit TRUE verglichen wird:
#include <windows.h>
void f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == TRUE)
{
// success code ...
}
else
{
// failure code
}
}
Meistens wird die Warnung durch Code verursacht, der fälschlicherweise ein HRESULT mit einem Boolean-Typ vergleicht. Es empfiehlt sich, das SUCCEEDED-Makro oder das FAILED-Makro zum Testen des Werts eines HRESULT zu verwenden. So korrigieren Sie die Warnung unter Verwendung des folgenden Codes
#include <windows.h>
void f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// success code ...
}
else
{
// failure code
}
}
Bei dieser Warnung entspricht der SCODE-Typ HRESULT.