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

📄 timelogserver.cpp

📁 Visual C++高级编程及其项目应用开发(含源代码)
💻 CPP
字号:
#include "stdafx.h"
#include "TimeLogServerApp.h"
#include "TimeLogServer.h"

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

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


IMPLEMENT_DYNCREATE(CTimeLogServer, CCmdTarget)

CTimeLogServer::CTimeLogServer()
{
	EnableAutomation();
	::AfxOleLockApp();

	CTime TimeStamp = CTime::GetCurrentTime();
	CString FileName;
	FileName.Format(_T("%s.log"),TimeStamp.Format("%Y%m%d"));
	m_logfile = fopen(FileName,_T("a"));
	if(m_logfile)
	{
		fprintf(m_logfile,_T("# # # # # # # # # # # # # # # # # \n"));
		fprintf(m_logfile,_T("开始于:%s"),(LPCTSTR)TimeStamp.Format("%Y年%m月%d日%H:%M %S"));
		fprintf(m_logfile,_T("\n"));
	}

}

CTimeLogServer::~CTimeLogServer()
{
	::AfxOleUnlockApp();

	// 关闭文件
	if(m_logfile)
	{
		CTime TimeStamp = CTime::GetCurrentTime();
		fprintf(m_logfile,_T("\n"));
		fprintf(m_logfile,_T("结束于:%s"),(LPCTSTR)TimeStamp.Format("%Y年%m月%d日%H:%M %S"));
        		fprintf(m_logfile,_T("\n"));
		fprintf(m_logfile,_T("# # # # # # # # # # # # # # # # #\n"));
		fclose(m_logfile);
	}

}


void CTimeLogServer::OnFinalRelease()
{
	// When the last reference for an automation object is released
	// OnFinalRelease is called.  The base class will automatically
	// deletes the object.  Add additional cleanup required for your
	// object before calling the base class.

	CCmdTarget::OnFinalRelease();
}


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()

BEGIN_DISPATCH_MAP(CTimeLogServer, CCmdTarget)
	//{{AFX_DISPATCH_MAP(CTimeLogServer)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_DISPATCH_MAP
END_DISPATCH_MAP()

// Note: we add support for IID_ITimeLogServer to support typesafe binding
//  from VBA.  This IID must match the GUID that is attached to the 
//  dispinterface in the .ODL file.

// {DB38AC5C-B40C-4968-A1BA-904EC70D6809}
/*static const IID IID_ITimeLogServer =
{ 0xdb38ac5c, 0xb40c, 0x4968, { 0xa1, 0xba, 0x90, 0x4e, 0xc7, 0xd, 0x68, 0x9 } };

BEGIN_INTERFACE_MAP(CTimeLogServer, CCmdTarget)
	INTERFACE_PART(CTimeLogServer, IID_ITimeLogServer, Dispatch)
END_INTERFACE_MAP()
*/

//实现类厂
IMPLEMENT_OLECREATE(CTimeLogServer,"TimeLogServer",
    0x55aa866, 0x1260, 0x4633, 0x86, 0x9, 0x4, 0xca, 0xed, 0x21, 0xb0, 0xb);
//映射接口到相应的嵌套类
BEGIN_INTERFACE_MAP(CTimeLogServer,CCmdTarget)
  INTERFACE_PART(CTimeLogServer,IID_ITimeLog,TimeLog)
END_INTERFACE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CTimeLogServer message handlers

//为嵌套类而实现IUnknown接口
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 = TimeStamp.Format("%Y年%m月%d日%H:%M:%S");
		CString LogText((LPCWSTR)*varLogText);
		fprintf(pThis->m_logfile,"\n%s\n%s\n%",NowTime,LogText);
		return NOERROR;
	}
	else
	{
		AfxMessageBox("没有日志文件!");
		return S_FALSE;
	}
}

⌨️ 快捷键说明

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