00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
#include "stdafx.h"
00022
#include "TraceObject.h"
00023
#include <iostream>
00024
#include <cstring>
00025
00026 CTraceObject::CTraceObject()
00027 {
00028
00029
#ifdef _DEBUG
00030
m_nTraceLevelsActive = MT_ERROR | MT_INFO | MT_WARNING | MT_DEBUG;
00031
#else
00032
m_nTraceLevelsActive = MT_ERROR | MT_INFO | MT_WARNING;
00033
#endif
00034
}
00035
00036 CTraceObject::~CTraceObject()
00037 {
00038
00039 }
00040
00041 void CTraceObject::SetTraceLevel(
int nTraceLevelMask )
00042 {
00043
m_nTraceLevelsActive = nTraceLevelMask;
00044 }
00045
00046 bool CTraceObject::GetIsTraceLevelAktivated( CTraceObject::eTraceLevel eLevel )
const
00047
{
00048
return (
m_nTraceLevelsActive & eLevel ) == eLevel;
00049 }
00050
00051 void CTraceObject::AddTrace(
const char * lpszMsg, CTraceObject::eTraceLevel eLevel)
00052 {
00053
00054
if (
GetIsTraceLevelAktivated( eLevel ) ==
true )
00055 {
00056
switch (eLevel)
00057 {
00058
case CTraceObject::MT_ERROR:
00059 std::cerr <<
"Error: " << lpszMsg << std::endl;
00060
break;
00061
case CTraceObject::MT_INFO:
00062 std::cout <<
"Info: " << lpszMsg << std::endl;
00063
break;
00064
case CTraceObject::MT_WARNING:
00065 std::cout <<
"Warning: " << lpszMsg << std::endl;
00066
break;
00067
case CTraceObject::MT_DEBUG:
00068 std::cout <<
"Debug: " << lpszMsg << std::endl;
00069
break;
00070 }
00071 }
00072 }
00073
00074 void CTraceObject::AddTrace( std::ostrstream & oStream, CTraceObject::eTraceLevel eLevel )
00075 {
00076 std::string sTraceText;
00077
00078 oStream << std::ends;
00079
00080 sTraceText += oStream.str();
00081
00082 oStream.freeze(0);
00083
00084 oStream.seekp(0, std::ios::beg );
00085
00086
AddTrace( sTraceText.c_str(), eLevel );
00087 }
00088
00089 std::string CTraceObject::GetLastErrorText( DWORD dwError )
00090 {
00091 std::string sErrorText(
"");
00092
00093 LPTSTR lpszTemp = NULL;
00094
00095
if ( dwError == 0 )
00096 {
00097 dwError = GetLastError();
00098 }
00099 DWORD dwRet = ::FormatMessage(
00100 FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ARGUMENT_ARRAY,
00101 0,
00102 dwError,
00103 0,
00104 (LPTSTR)&lpszTemp,
00105 0,
00106 0
00107 );
00108
00109
if ( dwRet > 0 )
00110 {
00111
if ( dwRet > 2 ) lpszTemp[ strlen(lpszTemp)-2 ] = 0;
00112 sErrorText = lpszTemp;
00113 }
00114
00115
if( lpszTemp )
00116 {
00117 LocalFree( HLOCAL(lpszTemp) );
00118 }
00119
return sErrorText;
00120 }