>// 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