// ErrorSupport.h: interface/implementation for the CErrorSupport class. #if !defined(AFX_ERRORSUPPORT_H__A7238E58_0795_11D2_A95C_0000F87584FA__INCLUDED_) #define AFX_ERRORSUPPORT_H__A7238E58_0795_11D2_A95C_0000F87584FA__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #ifndef FILENAME_AND_LINE // Macros that allow the file name and line number to be passed in as a string. #define LineNumberAsString(x) _T(#x) #define LineNumber(x) LineNumberAsString(x) #define FILENAME_AND_LINE _T(" File ") _T(__FILE__) _T(" Line ") LineNumber(__LINE__) #endif class CErrorSupport { public: CErrorSupport(LPCTSTR szErrorSource, LPCTSTR szEventSource); CErrorSupport(CLSID clsidMyCLSID, LPCTSTR szEventSource); virtual ~CErrorSupport() {}; // szFormat is a string of format specifiers. // Legal format specifiers are as below: // i -- long // h,x -- hex // e -- win32 error code // c -- currency // s -- TSTR void Log( HRESULT hr, LPCTSTR szLineNum, LPCTSTR szMethodName, WORD wCategory, WORD wMsgType, DWORD dwMsgID, LPCTSTR szFormat, ...); protected: CComBSTR m_bstrErrorSource; TCHAR m_szEventSource[128]; private: HRESULT InternalBuildStringList(HRESULT hr, LPCTSTR szLineNum, LPCTSTR szMethodName, LPCTSTR pszFmt, va_list *pvl, CAtlArray *prgStrings); HRESULT InternalFormatOneString(TCHAR cFmt, va_list *pvl, BSTR *pbstr); HRESULT InternalLogEvent(WORD dwCategory, DWORD dwMsgID, WORD wMsgType, DWORD cStrings, LPCTSTR *rgStrings); }; #endif // !defined(AFX_ERRORSUPPORT_H__A7238E58_0795_11D2_A95C_0000F87584FA__INCLUDED_)