c++ winapi lpcstr

c++ - ¿Qué representa LPCWSTR y cómo se debe manejar?



winapi lpcstr (3)

Antes que nada, ¿qué es exactamente? Supongo que es un puntero (LPC significa constante de puntero largo), pero ¿qué significa "W"? ¿Es un puntero específico para una cadena o un puntero a una cadena específica? Por ejemplo, quiero cerrar una ventana llamada "TestWindow".

HWND g_hTest; LPCWSTR a; *a = ("TestWindow"); g_hTest = FindWindowEx(NULL, NULL, NULL, a); DestroyWindow(g_hTest);

El código es ilegal y no funciona, ya que const char [6] no se puede convertir a CONST WCHAR. No lo entiendo en absoluto. Quiero obtener una comprensión clara de todos estos LPCWSTR, LPCSTR, LPSTR. Traté de encontrar algo, sin embargo, me confundí aún más. En el sitio msdn FindWindowEx se declara como

HWND FindWindowEx( HWND hwndParent, HWND hwndChildAfter, LPCTSTR lpszClass, LPCTSTR lpszWindow );

Entonces el último parámetro es LPCSTR, y el compilador exige LPCWSTR. Por favor ayuda.


Es un puntero largo a una cadena constante y ancha (es decir, una cadena de caracteres anchos).

Como es una cadena ancha, quiere que su aspecto constante sea como: L"TestWindow" . Yo tampoco crearía el intermedio, simplemente pasaría L"TestWindow" por el parámetro:

ghTest = FindWindowEx(NULL, NULL, NULL, L"TestWindow");

Si quiere ser pedantemente correcto, un "LPCTSTR" es una cadena de "texto": una cadena ancha en una compilación Unicode y una cadena angosta en una compilación ANSI, por lo que debe usar la macro apropiada:

ghTest = FindWindow(NULL, NULL, NULL, _T("TestWindow"));

Sin embargo, pocas personas se preocupan por producir código que pueda compilar tanto para conjuntos de caracteres Unicode como ANSI, y si no consigue que realmente funcione correctamente puede ser un poco más de trabajo con poca ganancia. En este caso particular, no hay mucho trabajo adicional, pero si está manipulando cadenas, hay un conjunto completo de macros de manipulación de cadenas que resuelven las funciones correctas.


LPCWSTR es equivalente a wchar_t const * . Es un puntero a una cadena de caracteres anchos que no será modificada por la llamada a la función.

Puede asignar a LPCWSTR s LPCWSTR una L a una cadena literal: LPCWSTR *myStr = L"Hello World";

LPC T STR y cualquier otro tipo de T , tome un tipo de cadena dependiendo de la configuración de Unicode para su proyecto. Si se define _UNICODE para su proyecto, el uso de los tipos T es igual que los formularios de caracteres anchos; de lo contrario, se forma el Ansi. La función apropiada también se llamará de esta manera: FindWindowEx se define como FindWindowExA o FindWindowExW dependiendo de esta definición.


LPCWSTR significa "Long Pointer to Constant Wide String". La W significa Ancho y significa que la cuerda se almacena en un carácter de 2 bytes vs. el char normal. Común para cualquier código C / C ++ que tenga que tratar con cadenas que no sean ASCII. =

Para obtener una cadena literal C normal para asignarla a un LPCWSTR , debe prefijarla con L

LPCWSTR a = L"TestWindow";