当调用函数KLog::Log时,参数中的类型一定要与format中的一致,不可以用隐式转换,要强制转换。
比如:
DWORDLONG ullTotalPhys = GetTotalPhys();
KLog::Instance().Log(_T("Installed Memory(RAM)=%dG (%d M)"),DWORD(ullTotalPhys/1024/1024/1024), DWORD(ullTotalPhys/1024/1024));
如果是下面的调用则不对。
KLog::Instance().Log(_T("Installed Memory(RAM)=%dG (%d M)"),(ullTotalPhys/1024/1024/1024), (ullTotalPhys/1024/1024));
void KLog::Log(const TCHAR *format, ...)
{
TCHAR* pBuffer = NULL;
try
{
pBuffer = new TCHAR[1024];
memset(pBuffer, 0, 1024*sizeof(TCHAR));
va_list ap;
va_start(ap, format);
_vsntprintf((TCHAR*)pBuffer, 1024, format, ap);
va_end(ap);
DWORD dwWritten = 0;
WriteConsole(m_hConsol, pBuffer, _tcslen(pBuffer), &dwWritten, NULL);
WriteConsole(m_hConsol, _T("\r\n"), _tcslen(_T("\r\n")), &dwWritten, NULL);
delete [] pBuffer;
pBuffer = NULL;
}
catch(...)
{
if(NULL != pBuffer)
{
delete [] pBuffer;
pBuffer = NULL;
}
}
}