che cos'è LPCTSTR
e LPCTSTR
-like (ad esempio HDC
) e cosa significa?
che cos'è LPCTSTR
e LPCTSTR
-like (ad esempio HDC
) e cosa significa?
Citando Brian Kramer nei forum MSDN
LPCTSTR
= Long Pointer to a Const TCHAR STRing (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
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.
Questi tipi sono documentati su Tipi di dati di Windows su MSDN:
LPCTSTR
An
LPCWSTR
ifUNICODE
is defined, anLPCSTR
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;