VARIANT CBoxEncoding::StrToBin(VARIANT& var, VARIANT &varCP) { CBoxBinPtr varString(var, VT_BSTR); UINT nCodePage; if(varCP.vt == VT_ERROR) nCodePage = _AtlGetConversionACP(); else { CComVariant varTemp; varTemp.ChangeType(VT_I4, &varCP); if(varTemp.vt == VT_I4) nCodePage = varTemp.lVal; else AfxThrowOleException(TYPE_E_TYPEMISMATCH); } int _nTempCount = ::WideCharToMultiByte(nCodePage, 0, LPWSTR(varString.m_pData), varString.m_nSize, NULL, 0, NULL, NULL); CBoxBinPtr varPtr(_nTempCount); ::WideCharToMultiByte(nCodePage, 0, LPWSTR(varString.m_pData), varString.m_nSize, varPtr, _nTempCount, NULL, NULL); return varPtr; }
int GetBaseByteLength(LPCWSTR pszSource) { if (!pszSource) return 0; // Returns required buffer length in XCHARs return ::WideCharToMultiByte(_AtlGetConversionACP(), 0, pszSource, -1, NULL, 0, NULL, NULL) - 1; }
CStringW ConvertStringToUnicode(const char* pSrc) { CStringW strResult; UINT nCodePage = CP_GB18030; if (!IsValidCodePage(CP_GB18030)) { nCodePage = _AtlGetConversionACP(); } int iLength = ::MultiByteToWideChar(nCodePage, 0, pSrc, -1, NULL, 0); if (iLength) { iLength = ::MultiByteToWideChar(nCodePage, 0, pSrc, -1, strResult.GetBuffer(iLength), iLength); strResult.GetBuffer()[iLength] = 0; strResult.ReleaseBufferSetLength(iLength); } return strResult; }
CStringA ConvertUnicodeToString(LPCWSTR pSrc) { CStringA strResult; UINT nCodePage = CP_GB18030; if (!IsValidCodePage(CP_GB18030)) { nCodePage = _AtlGetConversionACP(); } int iBytes = ::WideCharToMultiByte(nCodePage, 0, pSrc, -1, NULL, 0, NULL, NULL); if (iBytes) { iBytes = ::WideCharToMultiByte(nCodePage, 0, pSrc, -1, strResult.GetBuffer(iBytes), iBytes, NULL, NULL); strResult.GetBuffer()[iBytes] = 0; strResult.ReleaseBufferSetLength(iBytes); } return strResult; }
BSTR CBoxEncoding::BinToStr(VARIANT& var, VARIANT &varCP) { CBoxBinPtr varPtr(var); UINT nCodePage; if(varCP.vt == VT_ERROR) nCodePage = _AtlGetConversionACP(); else { CComVariant varTemp; varTemp.ChangeType(VT_I4, &varCP); if(varTemp.vt == VT_I4) nCodePage = varTemp.lVal; else AfxThrowOleException(TYPE_E_TYPEMISMATCH); } int _nTempCount = ::MultiByteToWideChar(nCodePage, 0, varPtr, varPtr.m_nSize, NULL, NULL); BSTR bstr = ::SysAllocStringLen(NULL, _nTempCount); if(bstr != NULL) ::MultiByteToWideChar(nCodePage, 0, varPtr, varPtr.m_nSize, bstr, _nTempCount); return bstr; }
void __gxx_log__::log_out( int iWay,const wchar_t* tcszOutFormat,... ) { EnterCriticalSection(&m_cs); LogCreate(); if( m_hFile == INVALID_HANDLE_VALUE ) { return; } wchar_t *tOut = NULL; if (m_bShowLogType) { switch(iWay) { case __GXX_HIT: { tOut = L" "; } break; case __GXX_WARNING: { tOut = L"警告 "; } break; case __GXX_ERROR: { tOut = L"错误 "; } break; case __GXX_BAD: { tOut = L"严重 "; } break; default: LeaveCriticalSection(&m_cs); return; } } else { tOut = L""; } int strLen = (int)wcslen(tcszOutFormat) ; if( strLen <= 0 ) { LeaveCriticalSection(&m_cs); return; } wchar_t _wBuf[BUF_SIZE]; va_list args; va_start(args,tcszOutFormat); vswprintf(_wBuf,tcszOutFormat,args); va_end(args); SYSTEMTIME stTime; GetLocalTime(&stTime); wchar_t outbuf[BUF_SIZE]; if (m_bDetailLog) { swprintf(outbuf,L"%s%d-%02d-%02d %02d:%02d:%02d %03d [%d] --> %s\r\n", tOut, stTime.wYear,stTime.wMonth,stTime.wDay, stTime.wHour,stTime.wMinute,stTime.wSecond,stTime.wMilliseconds,GetCurrentThreadId(), _wBuf); } else { swprintf(outbuf,L"%s%d-%02d-%02d %02d:%02d:%02d --> %s\r\n", tOut, stTime.wYear,stTime.wMonth,stTime.wDay, stTime.wHour,stTime.wMinute,stTime.wSecond, _wBuf); } //写入buf完毕 LONG longH = 0; if( ::SetFilePointer(m_hFile,0,&longH,FILE_END)>=0) { char _buf[BUF_SIZE]; ::WideCharToMultiByte( _AtlGetConversionACP(), 0, outbuf, (int)wcslen(outbuf)+1, _buf, BUF_SIZE*2, NULL, NULL ); DWORD written = 0; ::WriteFile(m_hFile,_buf,(DWORD)strlen(_buf),&written,NULL); } FlushFileBuffers(m_hFile); LeaveCriticalSection(&m_cs); }
void __gxx_trace__::_traceW(wchar_t * wc) { ::WideCharToMultiByte( _AtlGetConversionACP(), 0, wc, (int)wcslen(wc)+1, _buf, 1024, NULL, NULL ); _traceA(_buf); }
void __gxx_log__::log_out( int iWay,const wchar_t* tcszOutFormat,... ) { EnterCriticalSection(&m_cs); LogCreate(); if( m_hFile == INVALID_HANDLE_VALUE ) { return; } wchar_t *tOut = NULL; switch(iWay) { case __GXX_HIT: { tOut = L"提示"; } break; case __GXX_WARNING: { tOut = L"警告"; } break; case __GXX_ERROR: { tOut = L"错误"; } break; case __GXX_BAD: { tOut = L"严重"; } break; default: LeaveCriticalSection(&m_cs); return; } int strLen = wcslen(tcszOutFormat) ; if( strLen <= 0 ) { LeaveCriticalSection(&m_cs); return; } wchar_t _wBuf[512]; va_list args; va_start(args,tcszOutFormat); vswprintf(_wBuf,tcszOutFormat,args); va_end(args); SYSTEMTIME stTime; GetLocalTime(&stTime); wchar_t outbuf[1024]; swprintf(outbuf,L"%s! [ %d-%d-%d %d:%02d:%02d ]: %s\r\n", tOut, stTime.wYear,stTime.wMonth,stTime.wDay, stTime.wHour,stTime.wMinute,stTime.wSecond, _wBuf); //写入buf完毕 LONG longH = 0; if( ::SetFilePointer(m_hFile,0,&longH,FILE_END)>=0) { char _buf[2048]; ::WideCharToMultiByte( _AtlGetConversionACP(), 0, outbuf, wcslen(outbuf)+1, _buf, 2048, NULL, NULL ); // 2014-4-11 - qsc if(IsNeedEncrypt()) { Encrypt((BYTE*)_buf,strlen(_buf)); } DWORD written = 0; ::WriteFile(m_hFile,_buf,strlen(_buf),&written,NULL); } FlushFileBuffers(m_hFile); LeaveCriticalSection(&m_cs); }