En primer lugar, ¿qué es exactamente? Supongo que es un puntero (LPC significa constante de puntero largo), pero ¿qué significa "W"? ¿Es un puntero específico a 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 tener una comprensión clara de todos estos LPCWSTR, LPCSTR, LPSTR. Traté de encontrar algo, pero me confundí aún más. En msdn, el sitio 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 a LPCWSTR. Por favor ayuda.
Respuestas:
LPCWSTR
significa "Long Pointer to Constant Wide String". La W significa ancho y significa que la cadena se almacena en un carácter de 2 bytes frente a lo normalchar
. Común para cualquier código C / C ++ que tenga que lidiar solo con cadenas no ASCII. =Para obtener una cadena literal de C normal para asignar a a
LPCWSTR
, debe anteponerla con LLPCWSTR a = L"TestWindow";
fuente
SPCWSTR
.36UL
en C # es lo mismo que(ulong)36
(ulong es un entero de 64 bits sin signo).@
se puede usar en el mismo idioma que un prefijo para cadenas, cambiando ligeramente la forma en que se analizan.LPCWSTR
es equivalente awchar_t const *
. Es un puntero a una cadena de caracteres ancha que no será modificada por la llamada de función.Puede asignar
LPCWSTR
as anteponiendo una L a un literal de cadena:LPCWSTR *myStr = L"Hello World";
LPC T STR y cualquier otro tipo de T , tome un tipo de cadena dependiendo de la configuración Unicode para su proyecto. Si
_UNICODE
se define para su proyecto, el uso de tipos T es el mismo que las formas de caracteres anchos, de lo contrario las formas Ansi. La función apropiada también se llamará de esta manera:FindWindowEx
se define comoFindWindowExA
oFindWindowExW
dependiendo de esta definición.fuente
Es un puntero largo a una cadena ancha y constante (es decir, una cadena de caracteres anchos).
Ya que es una cadena de ancho, que desea hacer su mirada constante como:
L"TestWindow"
. Tampoco crearía el intermedioa
, solo pasaríaL"TestWindow"
el parámetro:ghTest = FindWindowEx(NULL, NULL, NULL, L"TestWindow");
Si quiere ser pedantemáticamente correcto, un "LPCTSTR" es una cadena de "texto": una cadena ancha en una compilación Unicode y una cadena estrecha en una compilación ANSI, por lo que debe usar la macro adecuada:
ghTest = FindWindow(NULL, NULL, NULL, _T("TestWindow"));
Sin embargo, pocas personas se preocupan por producir código que se pueda compilar tanto para juegos de caracteres Unicode como ANSI, y si no logras que funcione correctamente, puede ser un poco de trabajo extra por 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 se resuelven en las funciones correctas.
fuente