|
|
/**********************************************************************/ /** Microsoft Windows NT **/ /** Copyright(c) Microsoft Corp., 1997 **/ /**********************************************************************/
/*
aucommon.cxx
Common routines for ANSI/UNICODE classes.
FILE HISTORY: 5/21/97 michth created
*/ #include "precomp.hxx"
#include "aucommon.hxx"
int ConvertMultiByteToUnicode(LPSTR pszSrcAnsiString, BUFFER *pbufDstUnicodeString, DWORD dwStringLen) { DBG_ASSERT(pszSrcAnsiString != NULL); int iStrLen = -1; BOOL bTemp;
bTemp = pbufDstUnicodeString->Resize((dwStringLen + 1) * sizeof(WCHAR)); if (bTemp) { iStrLen = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, pszSrcAnsiString, dwStringLen + 1, (LPWSTR)pbufDstUnicodeString->QueryPtr(), (int)pbufDstUnicodeString->QuerySize()); if (iStrLen == 0) { DBG_ASSERT(GetLastError() != ERROR_INSUFFICIENT_BUFFER); iStrLen = -1; } else { //
// Don't count '\0'
//
iStrLen--; }
} return iStrLen; }
int ConvertUnicodeToMultiByte(LPWSTR pszSrcUnicodeString, BUFFER *pbufDstAnsiString, DWORD dwStringLen) { DBG_ASSERT(pszSrcUnicodeString != NULL); BOOL bTemp; int iStrLen = 0;
iStrLen = WideCharToMultiByte(CP_ACP, 0, pszSrcUnicodeString, dwStringLen + 1, (LPSTR)pbufDstAnsiString->QueryPtr(), (int)pbufDstAnsiString->QuerySize(), NULL, NULL); if ((iStrLen == 0) && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)) { iStrLen = WideCharToMultiByte(CP_ACP, 0, pszSrcUnicodeString, dwStringLen + 1, NULL, 0, NULL, NULL); if (iStrLen != 0) { bTemp = pbufDstAnsiString->Resize(iStrLen); if (!bTemp) { iStrLen = 0; } else { iStrLen = WideCharToMultiByte(CP_ACP, 0, pszSrcUnicodeString, dwStringLen + 1, (LPSTR)pbufDstAnsiString->QueryPtr(), (int)pbufDstAnsiString->QuerySize(), NULL, NULL); }
} } //
// Don't count '\0'
// and convert 0 to -1 for errors
//
iStrLen--; return iStrLen; }
|