Condividi tramite


C6217

Aggiornamento: novembre 2007

C6217

avviso C6217: Cast implicito tra tipi integer semanticamente diversi: test di HRESULT con 'not' in corso. Si consiglia l'utilizzo della macro SUCCEEDED o FAILED

L'avviso indica che un tipo HRESULT è sottoposto a test con l'operatore not (!). L'esito positivo (S_OK) in HRESULT è indicato da un valore 0. Per un tipo Boolean, invece, 0 indica un esito negativo. Il test di HRESULT con l'operatore not (!) per determinare il blocco di codice da eseguire può indurre a seguire un percorso di codice non corretto e provocare risultati indesiderati.

Esempio

Il codice riportato di seguito genera l'avviso perché viene utilizzato l'operatore not per determinare l'esito positivo o negativo di un valore HRESULT. In questo caso, il percorso di codice non corretto viene eseguito perché ( !hr ) determina l'esecuzione del codice erroneo:

#include <windows.h>
#include <objbase.h>

void f( )
{
  HRESULT hr = CoInitialize(NULL); 
  if (!hr)
  {
    // failure code ...
  }
  else
  {
    // success code ...
  }
}

Per risolvere il problema, il codice seguente utilizza la macro FAILED per ricercare l'errore:

#include <windows.h>
#include <objbase.h>

void f( )
{
  HRESULT hr = CoInitialize(NULL);  
  if (FAILED(hr))
  {
    // failure code ...
  }
  else
  {
    // success code ...
  }
}

Ai fini del presente avviso, il tipo SCODE equivale a HRESULT.

Il valore che solitamente indica l'esito positivo di HRESULT (S_OK)è false quando viene sottoposto a test come valore booleano.

Per verificare se HRESULT ha esito positivo, utilizzare la macro SUCCEEDED.

Vedere anche

Altre risorse

SUCCEEDED

FAILED