// The return value of OLE APIs and methods is an HRESULT. // This is not a handle to anything, but is merely a 32-bit value // with several fields encoded in the value. The parts of an // HRESULT are shown below. // // Many of the macros and functions below were orginally defined to // operate on SCODEs. SCODEs are no longer used. The macros are // still present for compatibility and easy porting of Win16 code. // Newly written code should use the HRESULT macros and functions. // // // HRESULTs are 32 bit values layed out as follows: // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // +-+-+-+-+-+---------------------+-------------------------------+ // |S|R|C|N|r| Facility | Code | // +-+-+-+-+-+---------------------+-------------------------------+ // // where // // S - Severity - indicates success/fail // // 0 - Success // 1 - Fail (COERROR) // // R - reserved portion of the facility code, corresponds to NT's // second severity bit. // // C - reserved portion of the facility code, corresponds to NT's // C field. // // N - reserved portion of the facility code. Used to indicate a // mapped NT status value. // // r - reserved portion of the facility code. Reserved for internal // use. Used to indicate HRESULT values that are not status // values, but are instead message ids for display strings. // // Facility - is the facility code // // Code - is the facility's status code // // // Severity values // #define SEVERITY_SUCCESS 0 #define SEVERITY_ERROR 1 // // Generic test for success on any status value (non-negative numbers // indicate success). // #define SUCCEEDED(Status) ((HRESULT)(Status) >= 0) // // and the inverse // #define FAILED(Status) ((HRESULT)(Status)<0)Cetin