2011-05-15 30 views
16

Estoy tratando de convertir un TCHAR a una cadena como en:La conversión a TCHAR cadena en C++

std::string mypath; 
TCHAR path[MAX_PATH]; 
GetModuleFileName(NULL, path, MAX_PATH); 

necesito para configurar mypath a la de path. Hice un bucle simple y concatenado path[index] a mypath y esto funciona, pero no me gusta de esta manera.

Soy nuevo en C++ pero he hecho mucho C#. He visto ejemplos del GetModuleFileName que pasa en un "char" pero no le gusta. Necesita el TCHAR o un LPWSTR.

Respuesta

20

TCHAR es una macro definida como un char o wchar según el conjunto de caracteres definido. El valor predeterminado después de 2008 es tener el carácter configurado en Unicode. este código funciona si cambias tu juego de caracteres.

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    TCHAR* bob ="hi"; 
    string s = bob;  
} 

haga clic en el botón derecho en la configuración del proyecto y chage el folowing

enter image description here

Si desea utilizar TCHAR como un uso juego de caracteres Unicode wstring

+10

Mejor aún, defina un typedef en 'TCHAR':' typedef std :: basic_string tstring; 'y use' tstring' en todas partes. – Pablo

+0

Gracias por la ayuda. Establecer el charactor configurado anteriormente funcionó. Ahora puedo usar el tipo char en el método GetModuleFileName. – David

+0

Aww no aceptar entonces. – rerun

8

Si desea que la ruta de caracteres , debe llamar al GetModuleFilenameA. Esa función toma LPSTR en lugar de LPTSTR.

Tenga en cuenta que casi todas las funciones de Win32 que toman o devuelven cadenas tienen dos versiones, una que termina en A (ANSI?) Y la otra termina en W (ancho).

+1

+1 - nitpick - Probablemente escribiría ':: GetModuleFilenameA'. –

5

Cuando realmente necesito hacerlo utilizo el siguiente:

TCHAR infoBuf[32767] 
GetWindowsDirectory(infoBuf, 32767); 
//Let's convert to string... 
wstring test(&infoBuf[0]); //convert to wstring 
string test2(test.begin(), test.end()); //and convert to string. 

Espero que ayude .