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