00001 #ifndef MGA_COMMONERROR_H
00002 #define MGA_COMMONERROR_H
00003
00004 #include <exception>
00005
00006
00007
00008 #if !defined(ASSERT) && defined(ATLASSERT)
00009 #define ASSERT ATLASSERT
00010 #endif
00011
00012
00013
00014 class hresult_exception : public std::exception
00015 {
00016 public:
00017 hresult_exception() throw();
00018 hresult_exception(const hresult_exception &e) throw();
00019 hresult_exception(HRESULT hr) throw();
00020 hresult_exception &operator=(const hresult_exception &e) throw();
00021 hresult_exception &operator=(HRESULT hr) throw();
00022 ~hresult_exception() throw();
00023 virtual const char *what() const throw();
00024
00025 public:
00026 HRESULT hr;
00027 };
00028
00029
00030
00031 #define NOTHROW throw()
00032
00033 #define COMTHROW(FUNC) \
00034 do { \
00035 HRESULT _hr = (FUNC); \
00036 if( FAILED(_hr) ) { \
00037 ASSERT(("COMTHROW: Throwing HRESULT exception. Press IGNORE", false)); \
00038 throw hresult_exception(_hr); \
00039 } \
00040 } while(false)
00041
00042 #define VERIFYTHROW(FUNC) \
00043 do { \
00044 if( !(bool)(FUNC) ) { \
00045 ASSERT(("VERIFYTHROW: Throwing VERIFY exception. Press IGNORE", false)); \
00046 throw hresult_exception(E_VERIFY); \
00047 } \
00048 } while(false)
00049
00050 #define COMVERIFY(FUNC) \
00051 VERIFY(SUCCEEDED(FUNC))
00052
00053 #define HR_THROW(_hr) \
00054 do { \
00055 ASSERT(("HR_THROW: Throwing HRESULT exception. Press IGNORE", false)); \
00056 throw hresult_exception(_hr); \
00057 } while(false)
00058
00059 #define COMTRY try
00060
00061 #define COMCATCH(CLEANUP) \
00062 catch(hresult_exception &e) \
00063 { \
00064 ASSERT( FAILED(e.hr) ); \
00065 { CLEANUP; } \
00066 SetErrorInfo(e.hr); \
00067 return e.hr; \
00068 } \
00069 return S_OK;
00070
00071 #define COMRETURN(HR) \
00072 { \
00073 HRESULT _hr = HR; \
00074 if( FAILED(_hr) ) \
00075 SetErrorInfo(_hr); \
00076 return _hr; \
00077 }
00078
00079 inline bool CheckOut_IsBound(BSTR b) { return b != NULL; }
00080 inline bool CheckOut_IsBound(const VARIANT &v) { return v.vt != VT_EMPTY; }
00081 inline bool CheckOut_IsBound(const IUnknown *p) { return p != NULL; }
00082 inline bool CheckOut_IsBound(const int) { return false; }
00083 inline bool CheckOut_IsBound(const short) { return false; }
00084 inline bool CheckOut_IsBound(const ULONG) { return false; }
00085 inline bool CheckOut_IsBound(const SAFEARRAY *p) { return p != NULL; }
00086
00087 #define CHECK_IN(PTR) \
00088 { \
00089 if( PTR == NULL ) \
00090 COMRETURN(E_INVALIDARG) \
00091 }
00092
00093 #define CHECK_OUT(PTR) \
00094 { \
00095 if( PTR == NULL ) \
00096 COMRETURN(E_POINTER) \
00097 else if( CheckOut_IsBound(*PTR) ) \
00098 COMRETURN(E_OUT_NOT_EMPTY) \
00099 }
00100
00101 #define CHECK_INOUT(PTR) \
00102 { \
00103 if( PTR == NULL ) \
00104 COMRETURN(E_INVALIDARG) \
00105 }
00106
00107
00108
00109 void SetErrorInfo(LPOLESTR desc) NOTHROW;
00110 void SetErrorInfo(HRESULT hr, LPOLESTR desc2 = NULL) NOTHROW;
00111 void GetErrorInfo(BSTR *p) NOTHROW;
00112 void GetErrorInfo(HRESULT hr, BSTR *p) NOTHROW;
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124 #define E_INVALID_USAGE _HRESULT_TYPEDEF_(0x80731001)
00125
00126
00127 #define E_EXCEPTION _HRESULT_TYPEDEF_(0x80731002)
00128
00129
00130 #define E_CONVERSION _HRESULT_TYPEDEF_(0x80731003)
00131
00132
00133 #define E_GETALL _HRESULT_TYPEDEF_(0x80731004)
00134
00135
00136 #define E_OUT_NOT_EMPTY _HRESULT_TYPEDEF_(0x80731005)
00137
00138
00139 #define E_SAMEPROJECT _HRESULT_TYPEDEF_(0x80731006)
00140
00141
00142 #define E_NOTFOUND _HRESULT_TYPEDEF_(0x80731007)
00143
00144
00145 #define E_FILEOPEN _HRESULT_TYPEDEF_(0x80731008)
00146
00147
00148 #define E_VERIFY _HRESULT_TYPEDEF_(0x80731009)
00149
00150
00151 #define E_COMTHROW_TEST _HRESULT_TYPEDEF_(0x8073100A)
00152
00153
00154 #define E_COMMON_FIRST E_INVALID_USAGE
00155 #define E_COMMON_LAST E_COMTHROW_TEST
00156
00157
00158
00159
00160 #define E_LOCK_VIOLATION _HRESULT_TYPEDEF_(0x80732001)
00161
00162
00163 #define E_INVALID_LOCK_VALUE _HRESULT_TYPEDEF_(0x80732002)
00164
00165
00166 #define E_ATTRID _HRESULT_TYPEDEF_(0x80732003)
00167
00168
00169 #define E_METAID _HRESULT_TYPEDEF_(0x80732004)
00170
00171
00172 #define E_METAPROJECT _HRESULT_TYPEDEF_(0x80732005)
00173
00174
00175 #define E_REPOSITORY _HRESULT_TYPEDEF_(0x80732006)
00176
00177
00178 #define E_PROJECT_MISMATCH _HRESULT_TYPEDEF_(0x80732007)
00179
00180
00181 #define E_ZOMBIE _HRESULT_TYPEDEF_(0x80732008)
00182
00183
00184 #define E_VALTYPE _HRESULT_TYPEDEF_(0x80732009)
00185
00186
00187 #define E_TRANSACTION _HRESULT_TYPEDEF_(0x8073200A)
00188
00189
00190 #define E_OBJECTEXISTS _HRESULT_TYPEDEF_(0x8073200B)
00191
00192
00193 #define E_TERRITORY _HRESULT_TYPEDEF_(0x8073200C)
00194
00195
00196 #define E_NOTLOCKED _HRESULT_TYPEDEF_(0x8073200D)
00197
00198
00199 #define E_REPOSITORY_DATA _HRESULT_TYPEDEF_(0x8073200E)
00200
00201
00202 #define E_NONEMPTY_COLL _HRESULT_TYPEDEF_(0x8073200F)
00203
00204
00205 #define E_UNKNOWN_STORAGE _HRESULT_TYPEDEF_(0x80732010)
00206
00207
00208 #define E_BINFILE _HRESULT_TYPEDEF_(0x80732011)
00209
00210
00211 #define E_NAMEMISSING _HRESULT_TYPEDEF_(0x80732012)
00212
00213
00214 #define E_CORE_FIRST E_LOCK_VIOLATION
00215 #define E_CORE_LAST E_NAMEMISSING
00216
00217
00218
00219
00220 #define E_ATTVALTYPE _HRESULT_TYPEDEF_(0x80733001)
00221
00222
00223 #define E_META_NOTOPEN _HRESULT_TYPEDEF_(0x80733002)
00224
00225
00226 #define E_INVALID_PATH _HRESULT_TYPEDEF_(0x80733003)
00227
00228
00229 #define E_METAREF _HRESULT_TYPEDEF_(0x80733004)
00230
00231
00232 #define E_META_FIRST E_ATTVALTYPE
00233 #define E_META_LAST E_METAREF
00234
00235
00236
00237
00238 #define E_XMLPARSER _HRESULT_TYPEDEF_(0x80734001)
00239
00240
00241 #define E_INVALID_DTD _HRESULT_TYPEDEF_(0x80734002)
00242
00243
00244 #define E_INVALID_GUID _HRESULT_TYPEDEF_(0x80734003)
00245
00246
00247 #define E_INVALID_FILENAME _HRESULT_TYPEDEF_(0x80734004)
00248
00249
00250 #define E_INVALID_MGA _HRESULT_TYPEDEF_(0x80734005)
00251
00252
00253 #define E_INVALID_META _HRESULT_TYPEDEF_(0x80734006)
00254
00255
00256 #define E_TOOMANYPASSES _HRESULT_TYPEDEF_(0x80734007)
00257
00258
00259 #define E_INVALID_XML_LONG _HRESULT_TYPEDEF_(0x80734008)
00260
00261
00262 #define E_PARSER_FIRST E_INVALID_DTD
00263 #define E_PARSER_LAST E_INVALID_XML_LONG
00264
00265
00266 #define E_XSLT_XERCES_INIT _HRESULT_TYPEDEF_(0x80734009)
00267 #define E_XSLT_COMPILE_ERROR _HRESULT_TYPEDEF_(0x8073400A)
00268 #define E_XSLT_TRANSF_ERROR _HRESULT_TYPEDEF_(0x8073400B)
00269 #define E_XSLT_ERROR _HRESULT_TYPEDEF_(0x8073400C)
00270 #define E_XSLTFILESEL_USER_ABORTED _HRESULT_TYPEDEF_(0x8073400D)
00271
00272 #endif//MGA_COMMONERROR_H