我的日志记录组件 - 东方散人 - CSDN博客
和大家分享下我写的日志记录文件组件。下面是一些定义和调用的封装。如存在bug,欢迎指正。
如需要demo程序和组件可去我在csdn下的下载资源或是去风华软件在线(www.fhuasoft.cn)网站上去下载。
//下面是定义文件
#ifndef _DEBUG_TRACE_2004
#define _DEBUG_TRACE_2004
#include
#include "logdeal.h"
#define DOUT_FILE 0x0001 //将调试信息输出到文件中去
#define DOUT_VIEW 0x0002 //将调试信息输出到DebugView中去
#define DOUT_ALL 0xffff //将调试信息发到所有接受调试信息的模块中去
class CLog
{
public:
CLog();
~CLog();
static CLog* Create();
BOOL Trace(BSTR s);
void AddRef();
void Release();
private:
CComPtrm_pLog;
static CLog *plog;
DWORD m_dwRef;
CRITICAL_SECTION m_cr;
};
#define DEBUG_TRACE
#ifdef DEBUG_TRACE
BOOL DebugTrace(LPCTSTR lpszFormat,...);
BOOL DLOGTrace(LPCTSTR lpszFormat,...);
BOOL DTrace(int, LPCTSTR lpszFormat,...);
#define DG DTrace
#define DT DebugTrace
#define _DT DEBUG_TRACE
#else
#define DT
#define DG
#undef _DT
#endif
#endif
//下面是实现文件
#include "stdafx.h"
#include
#include "DT.h"
#ifdef DEBUG_TRACE
BOOL DebugTrace(LPCTSTR lpszFormat,...)
{
ASSERT(AfxIsValidString(lpszFormat));
static HWND hwnd = ::FindWindowA(NULL, "DbgView");
if(!IsWindow(hwnd))
hwnd = ::FindWindowA(NULL, "DbgView");
if(hwnd)
{
CString szMsg;
va_list argList;
va_start(argList, lpszFormat);
try
{
szMsg.FormatV(lpszFormat, argList);
}
catch(...)
{
szMsg = "DebugHelper输出字符串格式错误!";
}
va_end(argList);
DWORD dwId = GetCurrentProcessId();
::SendMessage(hwnd,WM_SETTEXT,dwId,(LPARAM)(LPCTST R)szMsg);
return TRUE;
}
return FALSE;
}
BOOL DLOGTrace(LPCTSTR lpszFormat,...)
{
ASSERT(AfxIsValidString(lpszFormat));
{
CString szMsg;
va_list argList;
va_start(argList, lpszFormat);
try
{
szMsg.FormatV(lpszFormat, argList);
}
catch(...)
{
szMsg = "DebugView输出字符串格式错误!";
}
va_end(argList);
CLog *log = CLog::Create();
log->Trace(szMsg.AllocSysString());
log->Release();
return TRUE;
}
return FALSE;
}
BOOL DTrace(int ntype, LPCTSTR lpszFormat,...)
{
static int nt = -1;
if(nt SetFile(T2W(str));
m_dwRef = 0;
}
CLog::~CLog()
{
if(m_pLog)
{
m_pLog.Release();
}
::CoUninitialize();
// if(CLog::m_pLog)
}
CLog *CLog::Create()
{
if(plog == NULL)
{
plog = new CLog();
}
plog->AddRef();
return plog;
}
void CLog::AddRef()
{
EnterCriticalSection(&m_cr);
m_dwRef ++;
LeaveCriticalSection(&m_cr);
}
void CLog::Release()
{
EnterCriticalSection(&m_cr);
m_dwRef --;
if(m_dwRef == 0)
{
DeleteCriticalSection(&m_cr);
delete plog;
}
else
LeaveCriticalSection(&m_cr);
}
BOOL CLog::Trace(BSTR s)
{
if(plog && m_pLog)
{
EnterCriticalSection(&m_cr);
HRESULT hr = m_pLog->Trace(s) ;
LeaveCriticalSection(&m_cr);
return hr == S_OK;
}
return FALSE;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/nxjbill/archive/2008/04/29/23 42587.aspx
和大家分享下我写的日志记录文件组件。下面是一些定义和调用的封装。如存在bug,欢迎指正。
如需要demo程序和组件可去我在csdn下的下载资源或是去风华软件在线(www.fhuasoft.cn)网站上去下载。
//下面是定义文件
#ifndef _DEBUG_TRACE_2004
#define _DEBUG_TRACE_2004
#include
#include "logdeal.h"
#define DOUT_FILE 0x0001 //将调试信息输出到文件中去
#define DOUT_VIEW 0x0002 //将调试信息输出到DebugView中去
#define DOUT_ALL 0xffff //将调试信息发到所有接受调试信息的模块中去
class CLog
{
public:
CLog();
~CLog();
static CLog* Create();
BOOL Trace(BSTR s);
void AddRef();
void Release();
private:
CComPtrm_pLog;
static CLog *plog;
DWORD m_dwRef;
CRITICAL_SECTION m_cr;
};
#define DEBUG_TRACE
#ifdef DEBUG_TRACE
BOOL DebugTrace(LPCTSTR lpszFormat,...);
BOOL DLOGTrace(LPCTSTR lpszFormat,...);
BOOL DTrace(int, LPCTSTR lpszFormat,...);
#define DG DTrace
#define DT DebugTrace
#define _DT DEBUG_TRACE
#else
#define DT
#define DG
#undef _DT
#endif
#endif
//下面是实现文件
#include "stdafx.h"
#include
#include "DT.h"
#ifdef DEBUG_TRACE
BOOL DebugTrace(LPCTSTR lpszFormat,...)
{
ASSERT(AfxIsValidString(lpszFormat));
static HWND hwnd = ::FindWindowA(NULL, "DbgView");
if(!IsWindow(hwnd))
hwnd = ::FindWindowA(NULL, "DbgView");
if(hwnd)
{
CString szMsg;
va_list argList;
va_start(argList, lpszFormat);
try
{
szMsg.FormatV(lpszFormat, argList);
}
catch(...)
{
szMsg = "DebugHelper输出字符串格式错误!";
}
va_end(argList);
DWORD dwId = GetCurrentProcessId();
::SendMessage(hwnd,WM_SETTEXT,dwId,(LPARAM)(LPCTST R)szMsg);
return TRUE;
}
return FALSE;
}
BOOL DLOGTrace(LPCTSTR lpszFormat,...)
{
ASSERT(AfxIsValidString(lpszFormat));
{
CString szMsg;
va_list argList;
va_start(argList, lpszFormat);
try
{
szMsg.FormatV(lpszFormat, argList);
}
catch(...)
{
szMsg = "DebugView输出字符串格式错误!";
}
va_end(argList);
CLog *log = CLog::Create();
log->Trace(szMsg.AllocSysString());
log->Release();
return TRUE;
}
return FALSE;
}
BOOL DTrace(int ntype, LPCTSTR lpszFormat,...)
{
static int nt = -1;
if(nt SetFile(T2W(str));
m_dwRef = 0;
}
CLog::~CLog()
{
if(m_pLog)
{
m_pLog.Release();
}
::CoUninitialize();
// if(CLog::m_pLog)
}
CLog *CLog::Create()
{
if(plog == NULL)
{
plog = new CLog();
}
plog->AddRef();
return plog;
}
void CLog::AddRef()
{
EnterCriticalSection(&m_cr);
m_dwRef ++;
LeaveCriticalSection(&m_cr);
}
void CLog::Release()
{
EnterCriticalSection(&m_cr);
m_dwRef --;
if(m_dwRef == 0)
{
DeleteCriticalSection(&m_cr);
delete plog;
}
else
LeaveCriticalSection(&m_cr);
}
BOOL CLog::Trace(BSTR s)
{
if(plog && m_pLog)
{
EnterCriticalSection(&m_cr);
HRESULT hr = m_pLog->Trace(s) ;
LeaveCriticalSection(&m_cr);
return hr == S_OK;
}
return FALSE;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/nxjbill/archive/2008/04/29/23 42587.aspx