Tout d'abord, qu'est-ce que c'est exactement? Je suppose que c'est un pointeur (LPC signifie une constante de pointeur long), mais que signifie "W"? Est-ce un pointeur spécifique vers une chaîne ou un pointeur vers une chaîne spécifique? Par exemple, je souhaite 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 const char [6] ne peut pas être converti en CONST WCHAR. Je ne comprends pas du tout. Je veux avoir une compréhension claire de tous ces LPCWSTR, LPCSTR, LPSTR. J'ai essayé de trouver quelque chose, mais je suis devenu encore plus confus. Au site msdn FindWindowEx
est déclaré comme
HWND FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
);
Le dernier paramètre est donc LPCSTR et le compilateur demande à LPCWSTR. Veuillez aider.
Réponses:
LPCWSTR
signifie "Long Pointer to Constant Wide String". Le W signifie Wide et signifie que la chaîne est stockée dans un caractère de 2 octets par rapport à la normalechar
. Commun pour tout code C / C ++ qui doit traiter uniquement des chaînes non ASCII. =Pour obtenir une chaîne littérale C normale à affecter à a
LPCWSTR
, vous devez la préfixer avec LLPCWSTR a = L"TestWindow";
la source
SPCWSTR
.36UL
en C # est identique à(ulong)36
(ulong étant un entier 64 bits non signé).@
peut être utilisé dans la même langue comme préfixe pour les chaînes, en modifiant légèrement la façon dont elles sont analysées.LPCWSTR
équivaut àwchar_t const *
. C'est un pointeur vers 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 paramètres Unicode de votre projet. Si
_UNICODE
est défini pour votre projet, l'utilisation des types T est la même que les formes de caractères larges, sinon les formes Ansi. La fonction appropriée sera également appelée de cette manière:FindWindowEx
est définie commeFindWindowExA
ou enFindWindowExW
fonction de cette définition.la source
C'est un long pointeur vers une chaîne large et constante (c'est-à-dire une chaîne de caractères larges).
Comme il est une grande chaîne, vous voulez rendre votre constante comme:
L"TestWindow"
. Je ne créerais pas non plus l'intermédiairea
, je passerais justeL"TestWindow"
pour le paramètre:ghTest = FindWindowEx(NULL, NULL, NULL, L"TestWindow");
Si vous voulez être pédantiquement correct, un «LPCTSTR» est une chaîne de «texte» - une chaîne large dans une construction Unicode et une chaîne étroite dans une construction ANSI, vous devez donc utiliser la macro appropriée:
ghTest = FindWindow(NULL, NULL, NULL, _T("TestWindow"));
Cependant, peu de gens se soucient de produire du code capable de compiler à la fois pour les jeux de caractères Unicode et ANSI, et si vous ne le faites pas vraiment fonctionner correctement, cela peut être un peu plus de travail pour peu de gain. Dans ce cas particulier, il n'y a pas beaucoup de travail supplémentaire, mais si vous manipulez des chaînes, il existe tout un ensemble de macros de manipulation de chaînes qui se résolvent aux fonctions correctes.
la source