Cos'è LPCTSTR?

32

che cos'è LPCTSTR e LPCTSTR -like (ad esempio HDC ) e cosa significa?

    
posta Paul Rooney 12.04.2013 - 18:57
fonte

3 risposte

71

Citando Brian Kramer nei forum MSDN

LPCTSTR = L‌ong P‌ointer to a C‌onst T‌CHAR STR‌ing (Don't worry, a long pointer is the same as a pointer. There were two flavors of pointers under 16-bit windows.)

Here's the table:

  • LPSTR = char*
  • LPCSTR = const char*
  • LPWSTR = wchar_t*
  • LPCWSTR = const wchar_t*
  • LPTSTR = char* or wchar_t* depending on _UNICODE
  • LPCTSTR = const char* or const wchar_t* depending on _UNICODE
    
risposta data 12.04.2013 - 19:27
fonte
5

Non è necessario utilizzare mai nessuno dei tipi relativi a TCHAR.

Quei tipi, tutti i tipi di struttura che li usano e tutte le funzioni correlate sono mappati in fase di compilazione a una versione ANSI o UNICODE (in base alla configurazione del progetto). Le versioni ANSI hanno tipicamente una A aggiunta alla fine del nome e versioni unicode append a W. Puoi usarle esplicitamente se preferisci. MSDN noterà questo quando necessario, ad esempio elenca una funzione MessageBoxIndirectA e MessageBoxIndirectW qui: link

A meno che non abbiate come target Windows 9x, che mancava di implementazioni di molte funzioni Unicode, non è necessario utilizzare le versioni ANSI. Se stai puntando a Windows 9x, puoi usare TCHAR per creare un binario ansi e unicode dalla stessa base di codice, a patto che il tuo codice non faccia alcuna ipotesi sul fatto che TCHAR sia un char o wchar.

Se non ti interessa Windows 9x, ti consiglio di configurare il tuo progetto come unicode e di trattare TCHAR come identico a WCHAR. Puoi usare esplicitamente le funzioni e i tipi di W se preferisci, ma se non hai in programma di eseguire il tuo progetto su Windows 9x, non ha molta importanza.

    
risposta data 16.04.2013 - 23:52
fonte
0

Questi tipi sono documentati su Tipi di dati di Windows su MSDN:

LPCTSTR

An LPCWSTR if UNICODE is defined, an LPCSTR otherwise. For more information, see Windows Data Types for Strings.

This type is declared in WinNT.h as follows:

#ifdef UNICODE
 typedef LPCWSTR LPCTSTR; 
#else
 typedef LPCSTR LPCTSTR;
#endif

LPCWSTR

A pointer to a constant null-terminated string of 16-bit Unicode characters. For more information, see Character Sets Used By Fonts.

This type is declared in WinNT.h as follows:

typedef CONST WCHAR *LPCWSTR;

HDC

A handle to a device context (DC).

This type is declared in WinDef.h as follows:

typedef HANDLE HDC;
    
risposta data 30.05.2017 - 10:57
fonte

Leggi altre domande sui tag