Warum kann TCHAR * nicht in char * konvertiert werden?

8

Fehler C2664: 'strcpy': kann Parameter 1 von 'TCHAR *' nicht in 'char *' umwandeln Code:

%Vor%

Fehler C2664: 'strlen': kann Parameter 1 von 'LPCTSTR' nicht in 'const char *'

konvertieren %Vor%

Der Code oben zu einer Klasse, die in einem anderen Projekt gut funktioniert, kann ich den Grund nicht finden, warum es in diesem MS VS2010 Projekt nicht funktioniert.

    
Christoferw 18.02.2010, 10:33
quelle

4 Antworten

13

Sie müssen eine Funktion wie wcstombs verwenden, wenn _UNICODE ist definiert. Entweder das oder einfach _tcslen (Schau unter Generic-Text Routine-Mappings ) auf der TCHAR-Zeichenfolge und der Compiler wird es entweder auf strlen oder wcslen übertragen, je nachdem, ob Sie Unicode verwenden oder nicht.

    
Goz 18.02.2010, 10:43
quelle
7

Wahrscheinlich, weil TCHAR in einem Ihrer Projekte als Char definiert ist, aber nicht in VS2010, wo es wahrscheinlich wchar_t ist.

Wenn Ihr Projekt UNICODE / _UNICODE definiert, was der Angabe eines Unicode-Builds in den Projekteinstellungen entspricht, wird TCHARs wchar_t.

sein

Sie müssen grundsätzlich entscheiden, ob Unicode verwendet werden soll und wenn Sie dies tun, müssen Sie die regulären Aufrufe von strncpy et al in die whole-char-Entsprechungen ändern oder die t-variants verwenden, die genau wie TCHARs ändern . Sehen Sie sich die Hilfe für strncpy oder die anderen Funktionen an, um zu sehen, wie die Wide- oder T-Varianten heißen.

Sie können MSDN auch für Aufrufe wie strcpy ansehen, in denen Sie sehen können dass die wide-char-Version wcscpy heißt und die t-Version _tcscpy heißt. Ich würde Ihnen empfehlen, bei den t-Versionen zu bleiben, wenn Sie den Code in verschiedenen Projekten verwenden wollen, die entweder UNICODE verwenden oder nicht, oder um eine fundierte Entscheidung zu treffen, welche Sie verwenden werden, und dann dabei bleiben. Was besser ist, hängt von Ihrem Szenario ab, das ich sagen würde, und kann einige "religiöse" Meinungen hervorrufen ...

    
villintehaspam 18.02.2010 10:37
quelle
4

Hier ist ein Code, der den Trick für Sie machen wird, er wurde ursprünglich auf www.wincli.com/?p=72 veröffentlicht, aber hier habe ich ihn in eine kleine Klasse gekapselt:)

%Vor%

Hier ist eine Demonstration der Verwendung des Codes:

%Vor%     
Jan-Albert van den Berg 16.11.2012 12:00
quelle
3

Ist Ihr Projekt ein Unicode-Projekt? Wenn dem so ist, glaube ich, dass TCHAR einem wchar_t entspricht und nicht einem char , was Ihre Umwandlungsversuche ungültig macht. Weitere Informationen finden Sie hier .

    
jkp 18.02.2010 10:37
quelle