2008-10-01 19 views

Respuesta

7

TCHAR es un typedef específicas de Microsoft, ya sea carbón o wchar_t (un carácter ancho).

La conversión a carbón depende de cuál de éstos lo que realmente es. Si TCHAR es realmente un char, puedes hacer un molde simple, pero si es realmente un wchar_t, necesitarás una rutina para convertir conjuntos de caracteres. Vea la función MultiByteToWideChar()

+0

Usted trae una excelente punto. Aunque en esta situación particular, creo que el TChar es un personaje amplio, solo necesitaré hacer la conversión si no es así. que debo verificar de alguna manera. – CrashCodes

3

Hay algunas respuestas en esta entrada, así, especialmente si usted está buscando una solución multiplataforma:

UTF8 to/from wide char conversion in STL

+0

¿Cómo puede ser una plataforma cruzada? No hay otro software TCHAR. Sus ventanas específicas. –

10

La forma más sencilla es utilizar las macros de conversión:

  • CW2A
  • CA2W
  • etc ...

MSDN

+0

no deberíamos usar estas conversiones, porque si las llamamos en recursividad, no liberará la memoria – Vinay

+0

@Vinay Cree una función auxiliar que llame a una de estas, luego copia el resultado en el almacenamiento dinámico o en otro almacenamiento intermedio. Una vez que la función auxiliar vuelve, se libera la memoria de la pila. – bdonlan

3

Aunque en esta situación particular, creo que el TCHAR es un carácter ancho que sólo tendrá que hacer la conversión si no lo es. que debo verificar de alguna manera.

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

Lo bueno de esto es los dos tamaños de los iguales son constantes, lo que significa que el compilador se encargará (y eliminar) el if(), y si son iguales, retire todo el interior los apoyos

+0

también podemos realizar el uso de #ifdef _UNICODE {...} #else {....} #endif – Abhineet

2

Este es el código que duplica CPP _TCHAR * argv [] a char * argn [].

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

Si la adopción de código antiguo a Windows, un uso simple definen mencionado en el código como opcionales.

+0

enlace roto (por eso es mejor citar el ejemplo:) –

1

Usted puede poner condiciones en el código

ifdef _UNICODE

{// hacer como TCHAR es CHAR WIDE} else {// hacer como TCHAR es CHAR}

Cuestiones relacionadas