Nuestros mejores desarrolladores agotaron sus depósitos de café, investigando todo el tiempo por la respuesta, hasta que Leonardo halló el resultado en GitLab por lo tanto en este momento la compartimos aquí.
Solución:
Para responder a la primera parte de tu pregunta:
LPCSTR
es un puntero a una const string (LP significa puntero largo)
LPCTSTR
es un puntero a un const TCHAR
string(TCHAR
siendo un carácter ancho o un carácter dependiendo de si UNICODE está definido en su proyecto)
LPTSTR
es un puntero a (no constante) TCHAR
string
En la práctica, cuando hablamos de estos en el pasado, hemos omitido la frase “puntero a un” por simplicidad, pero como lo menciona lightness-races-in-orbit, todos son punteros.
Este es un gran artículo de proyecto de código que describe cadenas de C++ (vea 2/3 hacia abajo para ver un gráfico que compara los diferentes tipos)
Rápido y sucio:
LP
== Llargo PAGSpuntero Piensa en pointer o char*
C
= Const, en este caso, creo que se refieren al personaje string es una const, no siendo el puntero const.
STR
es string
los T
es para un carácter ancho o char (TCHAR) dependiendo de las opciones de compilación.
Cadenas ANSI de 8 bits
char
: carácter de 8 bits (tipo de datos C/C++ subyacente)CHAR
: alias dechar
(tipo de datos de Windows)LPSTR
: null-terminado string deCHAR
(Llargo PAGSpuntero)LPCSTR
: constante null-terminado string deCHAR
(Llargo PAGSpuntero Cconstante)
Cadenas Unicode de 16 bits
wchar_t
: carácter de 16 bits (tipo de datos C/C++ subyacente)WCHAR
: alias dewchar_t
(tipo de datos de Windows)LPWSTR
: null-terminado string deWCHAR
(Llargo PAGSpuntero)LPCWSTR
: constante null-terminado string deWCHAR
(Llargo PAGSpuntero Cconstante)
Dependiendo de UNICODE
definir
TCHAR
: alias deWCHAR
si se define UNICODE; de lo contrarioCHAR
LPTSTR
: null-terminado string deTCHAR
(Llargo PAGSpuntero)LPCTSTR
: constante null-terminado string deTCHAR
(Llargo PAGSpuntero Cconstante)
Entonces:
Articulo | 8 bits (ANSI) | 16 bits (Amplio) | Varía |
---|---|---|---|
personaje | CHAR |
WCHAR |
TCHAR |
string | LPSTR |
LPWSTR |
LPTSTR |
string (const.) | LPCSTR |
LPCWSTR |
LPCTSTR |
Lectura extra
TCHAR
→ Carácter de texto(archivo.es)
¿Por qué la página de códigos predeterminada de 8 bits se llama “ANSI”?
Desde Unicode y Windows XP
por Cathy Wissink
Gerente de Programa, Globalización de Windows
Corporación Microsoft
mayo de 2002
A pesar de la compatibilidad subyacente con Unicode en Windows NT 3.1, la compatibilidad con la página de códigos siguió siendo necesaria para muchas de las aplicaciones y componentes de nivel superior incluidos en el sistema, lo que explica el uso generalizado de la “A”. [ANSI] versiones de las API de Win32 en lugar de la “W” [“wide” or Unicode] versiones. (El término “ANSI”, como se usa para referirse a las páginas de códigos de Windows, es una referencia histórica, pero hoy en día es un nombre inapropiado que persiste en la comunidad de Windows. La fuente de esto proviene del hecho de que la página de códigos de Windows 1252 se basó originalmente en un borrador de ANSI, que se convirtió en el estándar ISO 8859-1. Sin embargo, al agregar puntos de código al rango reservado para los códigos de control en el estándar ISO, la página de códigos de Windows 1252 y las páginas de códigos de Windows posteriores basadas originalmente en la serie ISO 8859-x se desviaron de ISO Hasta el día de hoy, no es raro que la comunidad de desarrollo, tanto dentro como fuera de Microsoft, confunda la página de códigos 8859-1 con Windows 1252, y vea que “ANSI” o “A” se usan para significar Windows compatibilidad con la página de códigos).
Si sostienes algún titubeo o disposición de medrar nuestro crónica eres capaz de realizar una ilustración y con deseo lo leeremos.