2008-10-01 13 views

Antwort

7

TCHAR ist eine Microsoft-spezifische typedef für char oder wchar_t (ein breites Zeichen).

Umwandlung in Char hängt davon ab, welche dieser tatsächlich ist. Wenn TCHAR tatsächlich ein Zeichen ist, können Sie eine einfache Umwandlung durchführen, aber wenn es wirklich ein wchar_t ist, benötigen Sie eine Routine, um zwischen Zeichensätzen zu konvertieren. Siehe die Funktion MultiByteToWideChar()

+0

Sie bringen ein ausgezeichneter Punkt. Obwohl ich in dieser speziellen Situation denke, dass der TChar ein breiter Charakter ist, muss ich die Konvertierung nur durchführen, wenn dies nicht der Fall ist. was ich irgendwie überprüfen muss. – CrashCodes

3

Es gibt ein paar Antworten in diesem Beitrag als gut, vor allem, wenn Sie für eine Cross-Plattform-Lösung freuen:

UTF8 to/from wide char conversion in STL

+0

Wie kann es Cross-Plattform sein, es gibt keine TCHAR Anyware sonst. Seine Fenster spezifisch. –

10

Der einfachste Weg ist es, die Umwandlung von Makros zu verwenden:

  • CW2A
  • CA2W
  • etc ...

MSDN

+0

sollten wir diese Konvertierungen nicht verwenden, denn wenn wir diese in Rekursion aufrufen, wird der Speicher nicht freigegeben. – Vinay

+0

@Vinay Erstellen Sie eine Hilfsfunktion, die eine dieser Funktionen aufruft und das Ergebnis in den Zwischenspeicher oder in einen anderen Puffer kopiert. Sobald die Hilfsfunktion zurückkehrt, wird der Stapelspeicher freigegeben. – bdonlan

3

Obwohl in dieser besonderen Situation denke ich, die Tchar ein Breitzeichen brauchen Ich werde nur die Konvertierung zu tun, wenn es nicht ist. was ich irgendwie überprüfen muss.

if (sizeof(TCHAR) != sizeof(wchar_t)) 
{ .... } 

Die kühle Sache über das heißt beide Größen der equals Konstanten sind, was bedeutet, dass der Compiler behandelt (und entfernen) der if(), und wenn sie gleich sind, entfernen Sie alles in Die Klammern

+0

können wir auch durchführen mit #ifdef _UNICODE {...} #else {....} #endif – Abhineet

2

Hier ist der CPP-Code, der _TCHAR * argv [] nach char * argn [] dupliziert.

http://www.wincli.com/?p=72

Wenn Sie alten Code auf Windows, einfache Verwendung Annahme define im Code als optional erwähnt.

+0

defekten Link (deshalb ist es besser, das Beispiel zu zitieren) –

1

Sie können in Ihrem Code setzen Zustand

ifdef _UNICODE

else {// LIKE TCHAR DO WIDE CHAR} {// Kochst TCHAR CHAR}