Que signifie LPCWSTR et comment doit-il être manipulé?

Tout d’abord, qu’est-ce que c’est exactement? Je suppose que c’est un pointeur (LPC signifie constante de pointeur long), mais que signifie “W”? Est-ce un pointeur spécifique sur une chaîne ou un pointeur sur une chaîne spécifique? Par exemple, je veux fermer une fenêtre nommée “TestWindow”.

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

Le code est illégal et il ne fonctionne pas car le caractère const [6] ne peut pas être converti en CONST WCHAR. Je ne comprends pas du tout. Je veux bien comprendre tous ces LPCWSTR, LPCSTR, LPSTR. J’ai essayé de trouver quelque chose, mais j’ai été encore plus confus. Sur msdn, le site FindWindowEx est déclaré comme

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

Le dernier paramètre est donc LPCSTR et les exigences du compilateur sur LPCWSTR. S’il vous plaît aider.

LPCWSTR signifie “Long Pointer to Constant Wide Ssortingng”. Le W signifie Wide et signifie que la chaîne est stockée dans un caractère de 2 octets par rapport au caractère normal. Commun pour tout code C / C ++ devant traiter uniquement des chaînes non-ASCII.

Pour obtenir une chaîne littérale C normale à affecter à un LPCWSTR , vous devez le préfixer avec L

 LPCWSTR a = L"TestWindow"; 

LPCWSTR est équivalent à wchar_t const * . C’est un pointeur sur une chaîne de caractères large qui ne sera pas modifiée par l’appel de fonction.

Vous pouvez affecter à LPCWSTR s en ajoutant un L à un littéral de chaîne: LPCWSTR *myStr = L"Hello World";

LPC T STR et tout autre type T , prenez un type de chaîne en fonction des parameters Unicode de votre projet. Si _UNICODE est défini pour votre projet, l’utilisation des types T est identique aux formes de caractères larges, sinon les formulaires Ansi. La fonction appropriée sera également appelée de cette façon: FindWindowEx est défini comme FindWindowExA ou FindWindowExW selon cette définition.

C’est un long pointeur sur une chaîne large et constante (c’est-à-dire une chaîne de caractères larges).

Puisque c’est une chaîne large, vous voulez que votre constante ressemble à: L"TestWindow" . Je ne L"TestWindow" pas non plus d’intermédiaire, je passerais simplement L"TestWindow" pour le paramètre:

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

Si vous voulez être correct du sharepoint vue matériel, un “LPCTSTR” est une chaîne “text” – une chaîne large dans une version Unicode et une chaîne étroite dans une version ANSI, vous devez donc utiliser la macro appropriée:

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

Peu de gens se soucient de produire du code qui puisse comstackr à la fois pour les jeux de caractères Unicode et ANSI, et si vous ne le faites pas fonctionner correctement, cela peut représenter un gros travail supplémentaire pour un gain minime. Dans ce cas particulier, il n’y a pas beaucoup de travail supplémentaire, mais si vous manipulez des chaînes, il y a tout un ensemble de macros de manipulation de chaînes qui résolvent les fonctions correctes.