Quellen:
CodeGuru.com
Microsoft
char *ansistr = "Hello" // Quelle
BSTR unicodestr; // Ziel
int lenA = lstrlenA(ansistr);
int lenW;
lenW = ::MultiByteToWideChar(CP_ACP, 0, ansistr, lenA, 0, 0);
if (lenW > 0)
{
unicodestr = ::SysAllocStringLen(0, lenW);
::MultiByteToWideChar(CP_ACP, 0, ansistr, lenA, unicodestr, lenW);
}
else
{
// Fehler
}
// hier Strings auswerten
...
// abschließend String löschen
::SysFreeString(unicodestr);
BSTR unicodestr = 0; // Quelle
char *ansistr; // Ziel
// Funktion zum Füllen des Quellstrings
SomeCOMFunction(&unicodestr);
int lenW = ::SysStringLen(unicodestr);
int lenA = ::WideCharToMultiByte(CP_ACP, 0, unicodestr, lenW, 0, 0, NULL, NULL);
if (lenA > 0)
{
ansistr = new char[lenA + 1]; // mit null terminator
::WideCharToMultiByte(CP_ACP, 0, unicodestr, lenW, ansistr, lenA, NULL, NULL);
ansistr[lenA] = 0; // hier kann der null terminator gesetzt werden
}
else
{
// Fehler
}
// hier Strings auwerten
...
// abschließend Strings löschen
delete[] ansistr;
::SysFreeString(unicodestr);
2. Beispiel:
char cAsciiStr[] = "ASCIIText";
wchar_t wcUnicodeStr[1024];
MultiByteToWideChar(CP_ACP, 0, cAsciiStr, -1, wcUnicodeStr, 1024);
char cAsciiStr[1024];
wchar_t wcUnicodeStr[] = L"UnicodeText";
WideCharToMultiByte(CP_ACP, 0, wcUnicodeStr, -1, cAsciiStr, 1024, NULL, NULL);