Konvertierung von const char in LPCWSTR
-
Hallo,
ich habe mir ein Buch zugelegt, dass in die WinApi einführt und das erste Beispiel abgeschrieben. Der Ausschnitt, bei dem die Fehler auftreten sieht so aus:
Win.lpszClassName = "???"; //Fehler 1 Win.lpszMenuName = NULL; RegisterClass (&Win); GHandle = CreateWindow (Win.lpszClassName, "Titel", "Fenster", CW_USEDEFAULT, CW_USEDEFAULT, MaxWidth, MaxHeight, NULL, NULL, hInstance, NULL); // Fehler 2Doch ich bekomme folgende zwei Fehler:
Fehler 1 error C2440: '=': 'const char [4]' kann nicht in 'LPCWSTR' konvertiert werden c:\users\user\desktop\programmieren\c++\programme\test1111\test1111\test1111.cpp 24
Fehler 2 error C2664: 'CreateWindowExW': Konvertierung des Parameters 3 von 'const char [6]' in 'LPCWSTR' nicht möglich c:\users\user\desktop\programmieren\c++\programme\test1111\test1111\test1111.cpp 28Woran liegt das und wie kann ich das beheben?
Danke im Voraus
-
Sorry, ich hab' einen Fehler gemacht:
Im Original sieht das so aus:Win.lpszClassName = "???"; //Fehler 1 Win.lpszMenuName = NULL; RegisterClass (&Win); GHandle = CreateWindow (Win.lpszClassName, "Titel", WS_TILED, CW_USEDEFAULT, CW_USEDEFAULT, MaxWidth, MaxHeight, NULL, NULL, hInstance, NULL); //Fehler 2Doch es funktioniert trotzdem nicht!
-
FAQ lesen !
CreateWindowA
-
Ich hoffe, du kennst den Unterschied zwischen Unicode und ASCII/Codepages (mehr dazu)?
Windows arbeitet jedenfalls intern mit Unicode (afaik mit UTF-16 oder UCS-2), bietet aber in der WinAPI bei Funktionen und Strukturen, welche irgendwie mit Strings hantieren sowohl Unicode-, als auch ASCII-Versionen an. Bei CreateWindowEx gibt's z.b. die FunktionenCreateWindowExAundCreateWindowExW, die A-Version arbeitet mit ASCII-Strings, die W-Version mit Unicode-Strings. Imwindows.h-Header gibt's dann eine Präprozessor-Unterscheidung:#ifdef _UNICODE_ // Oder so, weiß grad nicht den genauen Namen #define CreateWindowEx CreateWindowExW #else #define CreateWindowEx CreateWindowExA #endifDu (bzw der Compiler, siehe Optionen) hast wahrscheinlich
_UNICODE_definiert, also wird dieCreateWindowExW-Funktion verwendet, welcheLPCWSTR(const short*) stattLPCSTR(const char*) als Parameter nimmt.
Entweder arbeitest du also mit Unicode-StringsWin.lpszClassName = L"???"; //Man beachte das L ... GHandle = CreateWindow (Win.lpszClassName, L"Titel", WS_TILED, CW_USEDEFAULT, CW_USEDEFAULT, MaxWidth, MaxHeight, NULL, NULL, hInstance, NULL);oder du nimmst das _UNICODE_-Flag raus und lässt deinen Code wie er ist, oder du nimmst die "unabhängige" Version, der Quellcode kann also sowohl mit
_UNICODE_als auch ohne kompiliert werden:Win.lpszClassName = TEXT("???"); //Man beachte das TEXT ... GHandle = CreateWindow (Win.lpszClassName, TEXT("Titel"), WS_TILED, CW_USEDEFAULT, CW_USEDEFAULT, MaxWidth, MaxHeight, NULL, NULL, hInstance, NULL);
-
Danke, Badestrand. Mit dem L funktioniert es einwandfrei!