Hauptseite | Klassenhierarchie | Alphabetische Liste | Auflistung der Klassen | Auflistung der Dateien | Klassen-Elemente

# TraceObject.cpp

    00001 /* ****************************************************************************
    00002 **
    00003 ** Projekt       : Class Library
    00004 ** File          : TraceObject.cpp
    00005 ** Version       : $Revision: 1.2 $
    00006 ** Author        : Axel Schmidt
    00007 ** Copyright     : (C) 2001 by Analytica GmbH
    00008 **-----------------------------------------------------------------------------
    00009 **
    00010 ** $Id: TraceObject.cpp,v 1.2 2001/07/13 06:52:15 AxelSchmidt Exp $
    00011 **
    00012 ** $Log: TraceObject.cpp,v $
    00013 ** Revision 1.2  2001/07/13 06:52:15  AxelSchmidt
    00014 ** Macros geändert
    00015 **
    00016 ** Revision 1.1  2001/07/12 14:34:51  AxelSchmidt
    00017 ** first version
    00018 **
    00019 ******************************************************************************/
    00020
    00021 #include "stdafx.h"
    00022 #include "TraceObject.h"
    00023 #include <iostream>
    00024 #include <cstring>
    00025
    00026 CTraceObject::CTraceObject()
    00027 {
    00028    // Standart Trace-Levels
    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; // Stelle sicher das das Ende mit '\0' versehen wurde
    00079
    00080    sTraceText += oStream.str();
    00081    // Erlaube wieder Zugriffe auf den internen stream buffer
    00082    oStream.freeze(0);
    00083    // Setze den stream buffer wieder auf den Anfang zurück
    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 }