SDC C-Project CF Review 프로그램
LYW
2022-07-05 63439977901d54a01924ed76290931aeddbce66c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
 
// 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;
}