Was ist das genau? Ich denke, es ist ein Zeiger (LPC bedeutet lange Zeigerkonstante), aber was bedeutet "W"? Ist es ein bestimmter Zeiger auf eine Zeichenfolge oder ein Zeiger auf eine bestimmte Zeichenfolge? Zum Beispiel möchte ich ein Fenster mit dem Namen "TestWindow" schließen.
HWND g_hTest;
LPCWSTR a;
*a = ("TestWindow");
g_hTest = FindWindowEx(NULL, NULL, NULL, a);
DestroyWindow(g_hTest);
Der Code ist illegal und funktioniert nicht, da const char [6] nicht in CONST WCHAR konvertiert werden kann. Ich verstehe es überhaupt nicht. Ich möchte ein klares Verständnis all dieser LPCWSTR, LPCSTR, LPSTR erhalten. Ich habe versucht, etwas zu finden, war aber noch mehr verwirrt. Bei msdn wird site FindWindowEx
als deklariert
HWND FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
);
Der letzte Parameter ist also LPCSTR, und der Compiler fordert LPCWSTR. Bitte helfen Sie.
Antworten:
LPCWSTR
steht für "Long Pointer to Constant Wide String". Das W steht für Wide und bedeutet, dass die Zeichenfolge in einem 2-Byte-Zeichen gegenüber der Normalen gespeichert istchar
. Gemeinsam für jeden C / C ++ - Code, der nur Nicht-ASCII-Zeichenfolgen verarbeiten muss. =Um eine normale C-Literalzeichenfolge zu erhalten, die einem zugewiesen werden soll
LPCWSTR
, müssen Sie ihr das Präfix L voranstellenquelle
SPCWSTR
.36UL
in C # dasselbe wie(ulong)36
(ulong ist eine vorzeichenlose 64-Bit-Ganzzahl).@
kann in derselben Sprache wie ein Präfix für Zeichenfolgen verwendet werden, wodurch sich die Art und Weise ändert, in der sie leicht analysiert werden.LPCWSTR
ist äquivalent zuwchar_t const *
. Es ist ein Zeiger auf eine breite Zeichenfolge, die vom Funktionsaufruf nicht geändert wird.Sie können
LPCWSTR
s zuweisen, indem Sie einem Zeichenfolgenliteral ein L voranstellen:LPCWSTR *myStr = L"Hello World";
LPC T STR und alle anderen T- Typen verwenden abhängig von den Unicode-Einstellungen für Ihr Projekt einen Zeichenfolgentyp. Wenn
_UNICODE
für Ihr Projekt definiert, entspricht die Verwendung von T-Typen den breiten Zeichenformularen, ansonsten den Ansi-Formularen. Die entsprechende Funktion wird auch folgendermaßen aufgerufen:FindWindowEx
wird alsFindWindowExA
oderFindWindowExW
abhängig von dieser Definition definiert.quelle
Es ist ein langer Zeiger auf eine konstante, breite Zeichenfolge (dh eine Zeichenfolge mit breiten Zeichen).
Da es sich um eine breite Zeichenfolge handelt, möchten Sie Ihre Konstante wie folgt aussehen lassen :
L"TestWindow"
. Ich würde auch kein Zwischenprodukt erstellen, sonderna
nurL"TestWindow"
den Parameter übergeben:Wenn Sie pedantisch korrekt sein möchten, ist ein "LPCTSTR" eine "Text" -String - eine breite Zeichenfolge in einem Unicode-Build und eine schmale Zeichenfolge in einem ANSI-Build. Verwenden Sie daher das entsprechende Makro:
Nur wenige Leute interessieren sich für die Erstellung von Code, der sowohl für Unicode- als auch für ANSI-Zeichensätze kompiliert werden kann. In diesem speziellen Fall gibt es nicht viel zusätzliche Arbeit, aber wenn Sie Zeichenfolgen bearbeiten, gibt es eine ganze Reihe von Zeichenfolgenmanipulationsmakros, die in die richtigen Funktionen aufgelöst werden.
quelle