DekGenius.com
[ Team LiB ] Previous Section Next Section

Recipe 5.9 Handling User-Defined HRESULTs

Problem

A COM object can return a user-defined HRESULT or an HRESULT that has no mapping to a managed exception type. You wish to handle these returned HRESULTs in a more specific manner.

Solution

The following code fragment illustrates the handling of user-defined COM/COM+ exceptions:

try
{
    CallCOMMethod( );
}
catch (System.Runtime.InteropServices.COMException ce)
{
    switch ((uint)ce.ErrorCode)
    {
        case 0x80132000:
            // Handle this specific user-defined COM/COM+ exceptions here
            break;
        case 0x80132001:
            // Handle this specific user-defined COM/COM+ exceptions here
            break;
        default:
            // Handle any other specific user-defined COM/COM+ 
            // exceptions here
            break;
    }
}
catch (Exception e)
{
    // Handle all other exceptions here
}

Discussion

Handle any user-defined exceptions that are unique to a specific COM/COM+ component by trapping the COMException exception. This class reflects COM/COM+ HRESULTs that have no mapping to managed exceptions.

The COMException has a property, ErrorCode, in addition to those properties in the base Exception class. This property contains the HRESULT value that the COM/COM+ object returned. Another difference between COMException and Exception is that the InnerException property of a COMException object will always be null.

See Also

See the "Error Raising and Handling Guidelines" and "Handling COM Interop Exceptions" topics in the MSDN documentation.

    [ Team LiB ] Previous Section Next Section