104 lines
3.3 KiB
C++
104 lines
3.3 KiB
C++
|
|
/**********************************************************************/
|
|
/** 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;
|
|
}
|