Vorwort:
Neuer Code sollte nicht Generic-Text Mappings werden. Sie wurden in den 90er Jahren erfunden, um die Portierung von Code von ANSI-Systemen (Win9x) auf Unicode-Systeme (Windows NT) zu erleichtern. TCHAR
expandiert entweder zu char
oder wchar_t
gesteuert durch die UNICODE
und _UNICODE
Präprozessorsymbole.
Verwenden Sie nicht TCHAR
, es sei denn, Sie müssen Win9x unterstützen.
Analyse:
Sie machen so komplizierter, als es ist. Da dieser Code
TCHAR* wArr = ...;
cout << wArr << endl;
schreibt eine Zeichenkette cout
(im Vergleich zu einem Zeigerwert), haben Sie nicht die Präprozessorsymbole UNICODE
oder _UNICODE
definiert. Mit anderen Worten: Sie verwenden MBCS-Zeichencodierung (siehe Unicode and MBCS) und die folgenden würde identisch Ausgabe erzeugen:
string szDllPath = "12345";
cout << szDllPath.c_str() << endl;
Wenn das wirklich ist, was Sie wollen (und ich bezweifle es ist), dann einfach Aufruf std::basic_string::cstr() ist ausreichend (verwenden Sie std::basic_string::data(), wenn Sie eine veränderbare Zeichenfolge benötigen).
Empfohlene Lösung:
Verwenden Unicode im gesamten Gebäude. Das Folgende löst Ihr unmittelbares Problem, wenn Sie ein Zeichenkettenliteral verwenden.
wstring szDllPath = L"12345";
wcout << szDllPath.c_str() << endl;
Wenn Sie kein Zeichenkettenliteral verwenden und müssen von einem std::string
zu einer breiten Zeichenfolge konvertieren, können Sie CString Klasse MFC verwenden, um die Konvertierung durchführen:
CStringW wideString(szDllPath.c_str()); // Conversion c'tor, taking a const char*
const wchar_t* = (LPCWSTR)wideString; // Invoke operator LPCWSTR()
Sie benötigen um das abschließende Nullzeichen 'wArr [Größe] = '\ 0';' hinzuzufügen.Offensichtlich müssen Sie 'TCHAR * wArr = new TCHAR [Größe + 1];' – chema989
Nur ** nicht ** erklären. Benutze nicht die 'TCHAR'-Abscheulichkeit von Microsoft. Es ist die Unterstützung für die Bereitstellung einer eingeschränkten Funktionalität Ihres Programms für Windows 9x, und es wurde bereits im Jahr 2000 mit der Einführung von Layer für Unicode veraltet. Seit Microsoft die Tool-Unterstützung für Windows 2000 und früher eingestellt hat, ist das ganze Zeug veraltet. Es handelt sich also um eine veraltete Technologie, die durch eine mittlerweile veraltete Technologie ersetzt wurde, die ein Problem anspricht, das Sie in der Zeit zurücklegen müssen, um darauf zu treffen. –