Waar staat LPCWstr voor en hoe moet het worden behandeld met?

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 FindWindowExwordt 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%

LPCWSTRstaat 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%

LPCWSTRis 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 LPCWSTRS door een L op een literaat te volgen: LPCWSTR *myStr = L"Hello World";

LPC T Str en enig ander T Types, neem een ​​treendype afhankelijk van de Unicode-instellingen voor uw project. Als _UNICODEis 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: FindWindowExwordt gedefinieerd als FindWindowExAof FindWindowExWAfhankelijk 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 aook 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.

Other episodes