Table of Contents 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.


    Table of Contents Previous Section Next Section