static LPWSTR xToUnicodeEx(DWORD codePage, LPSTR source, int size) { if(size == -1)size = Str::_LengthA(source); int destSize = xToUnicode(codePage, source, size, NULL, 0); if(destSize > 0) { destSize += sizeof(BYTE); LPWSTR dest = (LPWSTR)Mem::alloc(destSize * sizeof(WCHAR)); if(dest != NULL) { xToUnicode(codePage, source, size, dest, destSize); return dest; } } return NULL; }
LPWSTR xToUnicodeEx(DWORD codePage,LPSTR source,int size) { if (size == -1) size=lstrlenA(source); int destSize=xToUnicode(codePage,source,size,NULL,0); if (destSize > 0) { destSize+=sizeof(BYTE); LPWSTR dest=(LPWSTR)_alloc(destSize*sizeof(WCHAR)); if (dest) { xToUnicode(codePage,source,size,dest,destSize); return dest; } } return NULL; }
SYSLIBFUNC(DWORD) StrAnsiToUnicode(LPCSTR lpSource,DWORD dwSourceSize,LPWSTR lpDest,DWORD dwDestSize) { DWORD dwRet=0; do { if (!SYSLIB_SAFE::CheckStrParamA(lpSource,dwSourceSize)) break; if (!dwDestSize) dwDestSize=lstrlenA(lpSource)+1; if (!SYSLIB_SAFE::CheckParamWrite(lpDest,dwDestSize*sizeof(WCHAR))) break; dwRet=xToUnicode(1251,lpSource,dwSourceSize,lpDest,dwDestSize); } while (false); return dwRet; }
SYSLIBFUNC(LPWSTR) StrOemToUnicodeEx(LPCSTR lpSource,DWORD dwSourceSize,LPDWORD lpOutSize) { LPWSTR lpOut=NULL; do { if (!SYSLIB_SAFE::CheckStrParamsExA(lpSource,dwSourceSize,&lpOutSize)) break; if (!dwSourceSize) { dwSourceSize=lstrlenA(lpSource); if (!dwSourceSize) break; } DWORD dwRequedSize=xToUnicode(CP_OEMCP,lpSource,dwSourceSize,NULL,0); if (!dwRequedSize) break; lpOut=WCHAR_QuickAlloc(dwRequedSize+1); if (!lpOut) break; DWORD dwOutSize=StrOemToUnicode(lpSource,dwSourceSize,lpOut,dwRequedSize); if (dwOutSize) { if (lpOutSize) *lpOutSize=dwOutSize; lpOut[dwOutSize]=0; break; } MemFree(lpOut); lpOut=NULL; } while (false); return lpOut; }
int AnsiToUnicode(LPSTR source,int sourceSize,LPWSTR dest,int destSize) { return xToUnicode(1251,source,sourceSize,dest,destSize); }