Files
core/ASCOfficeXlsFile/ASCWorksheetConverter/source/Logging/DllLog.h

397 lines
11 KiB
C++

#pragma once
#define BUFFER_SIZE 32768
class CDllLog
{
public:
CDllLog::CDllLog(wchar_t* logFileName, int mode)
{
m_hLog = NULL;
if(logFileName == NULL)
return;
if (!mode) // always new
{
m_hLog = CreateFileW(logFileName,
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(m_hLog == INVALID_HANDLE_VALUE)
m_hLog = NULL;
else
DefineEOL();
}
else
{
m_hLog = CreateFileW(logFileName,
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(m_hLog == INVALID_HANDLE_VALUE)
m_hLog = NULL;
else
{
DefineEOL();
LARGE_INTEGER la;
::GetFileSizeEx(m_hLog, &la);
SetFilePointer(m_hLog, 0, NULL, FILE_END);
if (la.QuadPart > 0)
{
write(L"\n");
}
}
}
}
CDllLog::~CDllLog(void)
{
if(m_hLog != NULL)
{
FlushFileBuffers(m_hLog);
CloseHandle(m_hLog);
m_hLog = NULL;
}
}
void CDllLog::DefineEOL()
{
m_eol[0] = '\r';//0x0D;
m_eol[1] = '\n';//0x0A;
m_eol[2] = '\0';//0x00;
}
//
void CDllLog::write(char* string)
{
if((m_hLog == NULL) || (string == NULL)){ return;}
WriteFile(m_hLog, string, (DWORD)strlen(string), &len, NULL);
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
}
void CDllLog::write(char* string1, char* string2)
{
if((m_hLog == NULL) || (string1 == NULL) || (string2 == NULL))
return;
WriteFile(m_hLog, string1, (DWORD)strlen(string1), &len, NULL);
WriteFile(m_hLog, "\t\t", (DWORD)strlen("\t\t"), &len, NULL);
WriteFile(m_hLog, string2, (DWORD)strlen(string2), &len, NULL);
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
}
void CDllLog::write(wchar_t* string)
{
if ((m_hLog == NULL) || (string == NULL))
return;
memset(buf, 0, BUFFER_SIZE);
if (ConvertString(string, buf))
{
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
}
}
void CDllLog::write(wchar_t* string1, wchar_t* string2)
{
if ((m_hLog == NULL) || (string1 == NULL) || (string2 == NULL))
return;
memset(buf, 0, BUFFER_SIZE);
if (ConvertString(string1, buf))
{
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
WriteFile(m_hLog, "\t\t", (DWORD)strlen("\t\t"), &len, NULL);
memset(buf, 0, MAX_PATH);
if (ConvertString(string2, buf))
{
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
}
}
}
//
void CDllLog::write(wchar_t* string, int value)
{
write(string, (LONGLONG)value);
}
void CDllLog::write(wchar_t* string, long value)
{
write(string, (LONGLONG)value);
}
void CDllLog::write(wchar_t* string, LONGLONG value)
{
if((m_hLog == NULL) || (string == NULL))
return;
memset(buf, 0, BUFFER_SIZE);
if (ConvertString(string, buf))
{
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
memset(buf, 0, BUFFER_SIZE);
_i64toa_s(value, buf, BUFFER_SIZE, 10);
WriteFile(m_hLog, "\t\t", (DWORD)strlen("\t\t"), &len, NULL);
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
}
}
//
void CDllLog::write(wchar_t* string, unsigned char value)
{
write(string, (ULONGLONG)value);
}
void CDllLog::write(wchar_t* string, size_t value)
{
write(string, (ULONGLONG)value);
}
void CDllLog::write(wchar_t* string, DWORD value)
{
write(string, (ULONGLONG)value);
}
void CDllLog::write(wchar_t* string, ULONGLONG value)
{
if((m_hLog == NULL) || (string == NULL))
return;
memset(buf, 0, BUFFER_SIZE);
if (ConvertString(string, buf))
{
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
memset(buf, 0, BUFFER_SIZE);
_ui64toa_s(value, buf, BUFFER_SIZE, 10);
WriteFile(m_hLog, "\t\t", (DWORD)strlen("\t\t"), &len, NULL);
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
}
}
void CDllLog::writeHex(BYTE* array, long size)
{
if((m_hLog == NULL) || (array == NULL)){ return;}
#pragma warning (disable:4996)
strcpy(out, "");
#pragma warning (default:4996)
for(long i = 0; i < size; i++)
{
#pragma warning (disable:4996)
itoa(*(array+i), buf, 16);
strcat(out, buf);
strcat(out, " ");
#pragma warning (default:4996)
}
WriteFile(m_hLog, out, (DWORD)strlen(out), &len, NULL);
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
}
void CDllLog::writeHex(wchar_t* string, DWORD value)
{
if((m_hLog == NULL) || (string == NULL))
return;
memset(buf, 0, BUFFER_SIZE);
if (ConvertString(string, buf))
{
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
memset(buf, 0, BUFFER_SIZE);
_ltoa_s(value, buf, BUFFER_SIZE, 16);
WriteFile(m_hLog, "\t\t", (DWORD)strlen("\t\t"), &len, NULL);
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
}
}
void CDllLog::writeTime(wchar_t* string, DWORD hour, DWORD min, DWORD sec, DWORD millisec)
{
if((m_hLog == NULL) || (string == NULL)){ return;}
USES_CONVERSION;
if (ConvertString(string, buf))
{
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
WriteFile(m_hLog, "\t\t", (DWORD)strlen("\t\t"), &len, NULL);
memset(buf, 0, BUFFER_SIZE);
_ltoa_s((long)hour, buf, BUFFER_SIZE, 10);
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
WriteFile(m_hLog, ":", (DWORD)strlen(":"), &len, NULL);
memset(buf, 0, BUFFER_SIZE);
_ltoa_s((long)min, buf, BUFFER_SIZE, 10);
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
WriteFile(m_hLog, ":", (DWORD)strlen(":"), &len, NULL);
memset(buf, 0, BUFFER_SIZE);
_ltoa_s((long)sec, buf, BUFFER_SIZE, 10);
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
WriteFile(m_hLog, ":", (DWORD)strlen(":"), &len, NULL);
memset(buf, 0, BUFFER_SIZE);
_ltoa_s((long)millisec, buf, BUFFER_SIZE, 10);
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
}
}
//
void CDllLog::writeWindowsVersion(DWORD winVer)
{
if(m_hLog == NULL){ return;}
write(L"OS:", GetWinVerDescription(winVer));
write(L"");
}
BSTR CDllLog::GetWinVerDescription(long code)
{
// need WinVer.h
switch (code)
{
case 0: return L"Win_Unknown"; break;
case 1: return L"Win95"; break;
case 2: return L"Win95_OSR2"; break;
case 3: return L"Win98"; break;
case 4: return L"Win98_SE"; break;
case 5: return L"WinMe"; break;
case 6: return L"WinNT"; break;
case 7: return L"WinNT_351"; break;
case 8: return L"WinNT_40_Workstation"; break;
case 9: return L"WinNT_40_Server"; break;
case 10: return L"WinNT_40_Server_Enterprise"; break;
case 11: return L"Win2000_Unknown"; break;
case 12: return L"Win2000_Professional"; break;
case 13: return L"Win2000_Server"; break;
case 14: return L"Win2000_Server_Datacenter"; break;
case 15: return L"Win2000_Server_Advanced"; break;
case 16: return L"WinXP"; break;
case 17: return L"WinXP_Home"; break;
case 18: return L"WinXP_Professional"; break;
case 19: return L"WinXP_Professional_x64"; break;
case 20: return L"WinServer2003"; break;
case 21: return L"WinServer2003_Enterprise"; break;
case 22: return L"WinServer2003_Datacenter"; break;
case 23: return L"WinServer2003_WebEdition"; break;
case 24: return L"WinServer2003_IA64"; break;
case 25: return L"WinServer2003_IA64_Enterprise"; break;
case 26: return L"WinServer2003_IA64_Datacenter"; break;
case 27: return L"WinServer2003_AMD64"; break;
case 28: return L"WinServer2003_AMD64_Enterprise"; break;
case 29: return L"WinServer2003_AMD64_Datacenter"; break;
case 30: return L"WinServer2003_R2"; break;
case 31: return L"WinVista"; break;
case 32: return L"WinVistaUnlincensed"; break;
case 33: return L"WinVistaUltimate"; break;
case 34: return L"WinVistaBusiness"; break;
case 35: return L"WinVistaEnterprise"; break;
case 36: return L"WinVistaHome"; break;
case 37: return L"WinVistaHomeBasic"; break;
case 38: return L"WinVistaHomePremium"; break;
case 39: return L"WinVistaStarter"; break;
case 40: return L"WinServer2008"; break;
case 41: return L"WinServer2008Unlincensed"; break;
case 42: return L"WinServer2008_Enterprise"; break;
case 43: return L"WinServer2008_Enterprise_Core"; break;
case 44: return L"WinServer2008_Enterprise_Full"; break;
case 45: return L"WinServer2008_Enterprise_IA64"; break;
case 46: return L"WinServer2008_Datacenter"; break;
case 47: return L"WinServer2008_Datacenter_Core"; break;
case 48: return L"WinServer2008_Datacenter_Full"; break;
case 49: return L"WinServer2008_Standard"; break;
case 50: return L"WinServer2008_Standard_Core"; break;
case 51: return L"WinServer2008_Standard_Full"; break;
case 52: return L"WinServer2008_WebServer"; break;
case 53: return L"WinServer2008_R2"; break;
case 54: return L"WinHomeServer"; break;
case 55: return L"Win7"; break;
case 56: return L"Win7Unlincensed"; break;
case 57: return L"Win7Ultimate"; break;
case 58: return L"Win7Business"; break;
case 59: return L"Win7Enterprise"; break;
case 60: return L"Win7Home"; break;
case 61: return L"Win7HomeBasic"; break;
case 62: return L"Win7HomePremium"; break;
case 63: return L"Win7Starter"; break;
case 64: return L"Win32s"; break;
default: return L"Undefined"; break;
}
}
void CDllLog::writeLine()
{
if (m_hLog == NULL)
return;
char line[] = "------------------------------------------------------------";
DWORD len = 0;
WriteFile(m_hLog, line, (DWORD)(strlen(line)), &len, NULL);
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
}
bool CDllLog::ConvertString(wchar_t* input, char* output)
{
if (input == NULL)
return false;
else
{
#pragma warning (disable:4800)
int len = WideCharToMultiByte(CP_ACP, 0, input, -1, output, 0, NULL, NULL);
if (len <= BUFFER_SIZE)
return WideCharToMultiByte(CP_ACP, 0, input, -1, output, len, NULL, NULL);
else
return WideCharToMultiByte(CP_ACP, 0, input, BUFFER_SIZE, output, BUFFER_SIZE, NULL, NULL);
#pragma warning (default:4800)
}
}
private:
HANDLE m_hLog;
char m_eol[5];
unsigned long len;
char buf[32768];
char out[32768];
};