Allereerst, wat is het precies? Ik denk dat het een aanwijzer is (LPC betekent een lange aanwijzerconstante), maar wat betekent “w”? Is het een specifieke aanwijzer naar een string of een aanwijzer naar een specifieke reeks?
Ik wil bijvoorbeeld een venster met de naam “Testwindow” sluiten.
HWND g_hTest;
LPCWSTR a;
*a = ("TestWindow");
g_hTest = FindWindowEx(NULL, NULL, NULL, a);
DestroyWindow(g_hTest);
De code is illegaal en het werkt niet sinds const char [6] kan niet worden geconverteerd naar Const Wchar.
Ik snap het helemaal niet.
Ik wil een duidelijk begrip krijgen van al deze LPCWstr, LPCSTR, LPSSTR. Ik probeerde iets te vinden, maar ik werd nog meer in de war. Op MSDN-site FindWindowEx
wordt gedeclareerd als
HWND FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
);
Dus de laatste parameter is LPCSTR, en de compiler vereist op LPCWSTR.
Help alstublieft.
Antwoord 1, Autoriteit 100%
LPCWSTR
staat voor “lange aanwijzer tot constant brede string”. De W staat voor breed en betekent dat de tekenreeks wordt opgeslagen in een 2 byte-teken versus de normale char
. Gemeenschappelijk voor elke C / C++ -code die te maken heeft met niet-ASCII alleen strings. =
Om een normale C-letterlijke tekenreeks te krijgen om toe te wijzen aan een LPCWSTR
, moet u het voorvoegen met L
LPCWSTR a = L"TestWindow";
Antwoord 2, Autoriteit 9%
LPCWSTR
is gelijk aan wchar_t const *
. Het is een aanwijzer naar een brede tekenreeks die niet wordt gewijzigd door de functie-oproep.
U kunt toewijzen aan LPCWSTR
S door een L op een literaat te volgen: LPCWSTR *myStr = L"Hello World";
LPC T b>Str en enig ander T Types, neem een treendype afhankelijk van de Unicode-instellingen voor uw project. Als _UNICODE
is gedefinieerd voor uw project, is het gebruik van T-typen hetzelfde als de brede karaktervormen, anders vormen de ANSI-formulieren. De juiste functie zal ook op deze manier worden genoemd: FindWindowEx
wordt gedefinieerd als FindWindowExA
of FindWindowExW
Afhankelijk van deze definitie.
Antwoord 3, Autoriteit 5%
Het is een lange aanwijzer naar een constante, brede string (d.w.z. een reeks brede tekens).
Aangezien het een brede string is, wilt u uw constante uitzien als: L"TestWindow"
. Ik zou de tussenliggende a
ook niet maken, ik heb het gewoon doorgedaan L"TestWindow"
voor de parameter:
ghTest = FindWindowEx(NULL, NULL, NULL, L"TestWindow");
Als u pedantisch correct wilt zijn, is een “LPCTSTSTR” een “Tekst” -streng – een brede reeks in een unicode-build en een smalle reeks in een ANSI-build, zodat u de juiste macro moet gebruiken:
ghTest = FindWindow(NULL, NULL, NULL, _T("TestWindow"));
Weinig mensen geven echter om het produceren van code die voor zowel Unicode- als ANSI-tekensets kan compileren, en als u het niet goed kunt werken, kan dit behoorlijk een beetje extra werk zijn voor weinig winst. In dit specifieke geval is er niet veel extra werk, maar als je snaren manipuleert, is er een hele reeks stringmanipulatie macro’s die op de juiste functies oplossen.