⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timelogserver.cpp

📁 简单地实现了COM的框架
💻 CPP
字号:
// TimeLogServer.cpp : implementation file
//

#include "stdafx.h"
#include "MFC_Com.h"
#include "TimeLogServer.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CTimeLogServer

IMPLEMENT_DYNCREATE(CTimeLogServer, CCmdTarget)
// 实现类厂
IMPLEMENT_OLECREATE(CTimeLogServer, "TimeLogServer", 
	0x11223344, 0x1122, 0x3344, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88);
// 映射接口到相应的嵌套类
BEGIN_INTERFACE_MAP(CTimeLogServer, CCmdTarget)
INTERFACE_PART(CTimeLogServer, IID_ITimeLog, TimeLog)
END_INTERFACE_MAP()

CTimeLogServer::CTimeLogServer()
{
	//增加全局对象计数
	::AfxOleLockApp();
	//得到系统当前时间
	CTime TimeStamp = CTime::GetCurrentTime();
	//设置日志文件名,用当前日期来给日志文件命名
	CString FileName;
	CString strTmp;
	strTmp.Format(_T("%d-%d-%d"), TimeStamp.GetYear(), TimeStamp.GetMonth(),
		TimeStamp.GetDay());
		FileName.Format("%s.log", strTmp);
	//打开日志文件,参数a表示打开文件后在文件尾部迫加写入信息
	//同时,如果指定的文件不存在,则新建一个文件
	m_logfile = fopen((LPCTSTR)FileName, _T("a"));
	//如果打开日志文件成功,则记录初始化日志信息
	if(m_logfile)
	{
		fprintf(m_logfile, "# # # # # # # # # # # # #\n");
		strTmp.Format(_T("%d年%d月%d日%d:%d %d"), TimeStamp.GetYear(),
			TimeStamp.GetMonth(), TimeStamp.GetDay(),
			TimeStamp.GetHour(), TimeStamp.GetMinute(),
			TimeStamp.GetSecond());
		fprintf(m_logfile, _T("开始于:%s"), strTmp);
		fprintf(m_logfile, _T("\n"));
	}
}

CTimeLogServer::~CTimeLogServer()
{
	//减少全局对象计数
	::AfxOleUnlockApp();
	//关闭己打开的日志文件
	CString strTmp;
	if (m_logfile)
	{
		//写入日志结束信息
		CTime TimeStamp = CTime::GetCurrentTime();
		fprintf(m_logfile, _T("/n"));
		strTmp.Format(_T("%d年%d月%d日%d:%d %d"), TimeStamp.GetYear(),
			TimeStamp.GetMonth(), TimeStamp.GetDay(),
			TimeStamp.GetHour(), TimeStamp.GetMinute(),
			TimeStamp.GetSecond());
		fprintf(m_logfile, _T("结束于:%s"), strTmp);
		fprintf(m_logfile, _T("\n"));
		fprintf(m_logfile, "# # # # # # # # # # # # #\n");
		//关闭日志文件
		fclose(m_logfile);
	}
}


BEGIN_MESSAGE_MAP(CTimeLogServer, CCmdTarget)
	//{{AFX_MSG_MAP(CTimeLogServer)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTimeLogServer message handlers
STDMETHODIMP_(ULONG) CTimeLogServer::XTimeLog::AddRef()
{
	METHOD_PROLOGUE(CTimeLogServer, TimeLog)
	return pThis->ExternalAddRef();
}

STDMETHODIMP_(ULONG) CTimeLogServer::XTimeLog::Release()
{
	METHOD_PROLOGUE(CTimeLogServer, TimeLog)
	return pThis->ExternalRelease();
}

STDMETHODIMP CTimeLogServer::XTimeLog::QueryInterface(REFIID riid, void** ppvObj)
{
	METHOD_PROLOGUE(CTimeLogServer, TimeLog)
	return pThis->ExternalQueryInterface(&riid, ppvObj);
}

STDMETHODIMP CTimeLogServer::XTimeLog::OutputLog(BSTR* varLogText)
{
	METHOD_PROLOGUE(CTimeLogServer, TimeLog)
	if (pThis->m_logfile)
	{
		CTime TimeStamp = CTime::GetCurrentTime();
		CString NowTime;
		NowTime .Format(_T("%d年%d月%d日%d:%d %d"), TimeStamp.GetYear(),
			TimeStamp.GetMonth(), TimeStamp.GetDay(),
			TimeStamp.GetHour(), TimeStamp.GetMinute(),
			TimeStamp.GetSecond());
		CString LogText((LPCWSTR)* varLogText);
		fwprintf(pThis->m_logfile, L"\n%s\n%s\n", NowTime, LogText);
		return NOERROR;
	}
	else
	{
		AfxMessageBox("没有口志文件!");
		return S_FALSE;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -