[C++] LPCWSTR Problem

daemon777

Lt. Commander
Registriert
Dez. 2003
Beiträge
1.371
Tja ich habe leider mal wieder ein Problem. Dieses Problem zieht sich jetzt bereits durch die letzten 20 Tutorials die ich ausprobieren wollte :(

Und zwar bekomme ich immer eine Meldung wie: cannot convert from 'const char [13]' to 'LPCWSTR'

Dieses Problem habe ich zB wenn ich etwas wie folgt vor habe:
Code:
RegOpenKeyEx(KEY,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0, KEY_ALL_ACCESS,&hkey);

Aber auch hierbei:
Code:
WNDCLASSEX wc = {sizeof(WNDCLASSEX), CS_CLASSDC, WinProc, 0L, 0L,
                     GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                     "DX Project 1", NULL};

Und bei zahllosen anderen Beispielen.

Jetzt habe ich mich mit Google natürlich auch schon ein bischen schlau gemacht und bin auf diese Möglichkeit gestoßen:
Code:
......
  
wchar_t wdest[16];
  _USE(cout.getloc(), ctype<wchar_t> ).widen("C:\\programm.exe", "C:\\programm.exe"+16, wdest); 
  MoveFile(wfrom,wdest);

Allerdings kommt bei dieser Umwandlich von char zu wchar_t immer eine Hexadezimalzahl raus. Eigentlich sollte aber eine Zeichenkette rauskommen.

Mit dem VC++ 6.0 in der Autoren Version funktioniert es einwandfrei. Aber mit der Express Edition vom VC++ 2005 nicht da kommt wie gesagt eine Hex-zahl raus.

Könnt ihr mir vielleicht helfen ? Ich weiß irgendwie nicht mehr was ich tun soll.

Vielen Dank schon mal dafür, dass ihr euch über diese zugegebenermaßen seltsame Frage den Kopf zerbrecht :D
 
Hallo daemon777,

schau dir mal diese Funktion an: WideCharToMultiByte

Prinzipiell ist es auch kein Problem einen Unicode String selber in einen char zu konvertieren.

Der Unicode String hat eben nur nach jedem Byte eine 0 und am Schluss noch mal eine extra 0. Entferne die Nullen und Du hast eine normalen String. Solange Du keine Unicode Zeichen verwendest :-).

MfG

Arnd
 
Ich nehme mal an, dass die Express Edition standardmäßig Unicode aktiviert hat, d.h. du musst ein "L" for all deine String-Literale schreiben damit diese auch Unicode sind, also
PHP:
RegOpenKeyEx(KEY,L"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0, KEY_ALL_ACCESS,&hkey);

Alternativ kannst du in den Einstellungen natürlich auch einfach Unicode deaktivieren.
 
Danke euch beiden ihr habt mir wirklich geholfen :)

WideCharToMultiByte und MultiByteToWideChar war genau das was ich gebraucht habe.
Aber das mit dem L davor ist in den Fällen in denen es möglich ist natürlich viel einfacher :D

Vielen Danke ich versuche wirklich schon ewig das Problem in den Griff zu bekommen :p
 
Bei Direct X lässt sich Unicode leider nicht immer umgehen :-).

MfG

Arnd
 
Zurück
Oben