»õ ÆÄÀÏ |
| | |
| | |  |
| | | // stdafx.cpp : íì¤ í¬í¨ íì¼ë§ ë¤ì´ ìë ìì¤ íì¼ì
ëë¤. |
| | | // ReveiwHistory.pchë 미리 ì»´íì¼ë í¤ëê° ë©ëë¤. |
| | | // stdafx.objìë 미리 ì»´íì¼ë íì ì ë³´ê° í¬í¨ë©ëë¤. |
| | | |
| | | #include "stdafx.h" |
| | | |
| | | |
| | | CCriticalSection g_criticalExe; |
| | | CCriticalSection g_criticalLog; |
| | | |
| | | |
| | | CString GetExePath() |
| | | { |
| | | g_criticalExe.Lock(); |
| | | |
| | | static TCHAR pBuf[256] = { 0, }; |
| | | |
| | | memset(pBuf, NULL, sizeof(pBuf)); |
| | | |
| | | if (AfxGetApp()) |
| | | GetModuleFileName(AfxGetApp()->m_hInstance, pBuf, sizeof(pBuf)); |
| | | else |
| | | GetModuleFileName(NULL, pBuf, sizeof(pBuf)); |
| | | |
| | | CString strFilePath; |
| | | |
| | | strFilePath.Format(_T("%s"), pBuf); |
| | | |
| | | strFilePath = strFilePath.Left(strFilePath.ReverseFind(_T('\\'))); |
| | | |
| | | g_criticalExe.Unlock(); |
| | | |
| | | return strFilePath.GetString(); |
| | | } |
| | | |
| | | void LOG(int nType, const char* fmt, ...) |
| | | { |
| | | g_criticalLog.Lock(); |
| | | |
| | | static _TCHAR szLog[5096]; |
| | | |
| | | FILE* fp = NULL; |
| | | CTime tm = CTime::GetCurrentTime(); |
| | | CString strLog = _T(""); |
| | | CString strPath = _T(""); |
| | | va_list args; |
| | | SYSTEMTIME cur_time; |
| | | |
| | | if (fmt == NULL) |
| | | { |
| | | g_criticalLog.Unlock(); |
| | | |
| | | return; |
| | | } |
| | | |
| | | ZeroMemory(szLog, 5096); |
| | | va_start(args, fmt); |
| | | wvsprintf(szLog, fmt, args); |
| | | va_end(args); |
| | | |
| | | strPath.Format("%s\\Log\\%s", GetExePath(), tm.Format("%Y_%m_%d_%H.log").GetString()); |
| | | |
| | | fopen_s(&fp, (LPSTR)(LPCSTR)strPath, "a+"); |
| | | |
| | | GetLocalTime(&cur_time); |
| | | |
| | | strLog.Format("%04d-%02d-%02d %02d:%02d:%02d:%03ld : ", |
| | | cur_time.wYear, |
| | | cur_time.wMonth, |
| | | cur_time.wDay, |
| | | cur_time.wHour, |
| | | cur_time.wMinute, |
| | | cur_time.wSecond, |
| | | cur_time.wMilliseconds); |
| | | |
| | | if (fp != NULL) |
| | | { |
| | | switch (nType) |
| | | { |
| | | case Normal: strLog += _T("[NORMAL ] : "); break; |
| | | case Dbg: strLog += _T("[DEBUG ] : "); break; |
| | | case Operation: strLog += _T("[OPERATION ] : "); break; |
| | | case Err: strLog += _T("[ERROR ] : "); break; |
| | | } |
| | | |
| | | strLog += szLog; |
| | | |
| | | fprintf(fp, "%s\r\n", (LPSTR)(LPCSTR)strLog); |
| | | fflush(fp); |
| | | fclose(fp); |
| | | } |
| | | |
| | | g_criticalLog.Unlock(); |
| | | } |
| | | |
| | | void INIWriteStr(CString strAppName, CString strKeyName, CString strValue, CString strFilePath) |
| | | { |
| | | WritePrivateProfileString(strAppName, strKeyName, strValue, strFilePath); |
| | | } |
| | | |
| | | CString INIReadStr(CString strAppName, CString strKeyName, CString strFilePath) |
| | | { |
| | | TCHAR szReturnString[1024] = { 0, }; |
| | | |
| | | memset(szReturnString, NULL, 1024); |
| | | |
| | | GetPrivateProfileString(strAppName, strKeyName, _T(""), szReturnString, 1024, strFilePath); |
| | | |
| | | CString str; |
| | | |
| | | str.Format(_T("%s"), szReturnString); |
| | | |
| | | return str; |
| | | } |
| | | |
| | | void INIWriteInt(CString strAppName, CString strKeyName, int nValue, CString strFilePath) |
| | | { |
| | | CString str; |
| | | |
| | | str.Format(_T("%d"), nValue); |
| | | |
| | | WritePrivateProfileString(strAppName, strKeyName, str, strFilePath); |
| | | } |
| | | |
| | | int INIReadInt(CString strAppName, CString strKeyName, CString strFilePath) |
| | | { |
| | | TCHAR szReturnString[1024] = { 0, }; |
| | | |
| | | memset(szReturnString, NULL, 1024); |
| | | |
| | | GetPrivateProfileString(strAppName, strKeyName, _T(""), szReturnString, 1024, strFilePath); |
| | | |
| | | int nRet = atoi(szReturnString); |
| | | |
| | | return nRet; |
| | | } |