Compartir a través de


Códigos de error en COM

Para indicar éxito o error, los métodos COM y las funciones devuelven un valor de tipo HRESULT. HrESULT es un entero de 32 bits. El bit de orden superior de las señales HRESULT indica que se ha realizado correctamente o no. Cero (0) indica que se ha realizado correctamente y 1 indica un error.

Esto genera los siguientes intervalos numéricos:

  • Códigos de éxito: 0x7FFFFFFF de 0x0.
  • Códigos de error: 0x80000000 0xFFFFFFFF.

Un pequeño número de métodos COM no devuelve un valor HRESULT . Por ejemplo, los métodos AddRef y Release devuelven valores largos sin signo. Pero todos los métodos COM que devuelven un código de error lo hacen devolviendo un valor HRESULT .

Para comprobar si un método COM se realiza correctamente, examine el bit de orden superior del HRESULT devuelto. Los encabezados de Windows SDK proporcionan dos macros que facilitan esto: la macro SUCCEEDED y la macro FAILED . La macro SUCCEEDED devuelve TRUE si hrESULT es un código correcto y FALSE si se trata de un código de error. En el ejemplo siguiente se comprueba si CoInitializeEx se realiza correctamente.

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | 
    COINIT_DISABLE_OLE1DDE);

if (SUCCEEDED(hr))
{
    // The function succeeded.
}
else
{
    // Handle the error.
}

A veces es más conveniente probar la condición inversa. La macro FAILED hace lo contrario de SUCCEEDED. Devuelve TRUE para un código de error y FALSE para un código correcto.

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | 
    COINIT_DISABLE_OLE1DDE);

if (FAILED(hr))
{
    // Handle the error.
}
else
{
    // The function succeeded.
}

Más adelante en este módulo, veremos algunos consejos prácticos sobre cómo estructurar el código para controlar los errores COM. (Consulte Control de errores en COM).

Siguientes

Crear un objeto en COM