[HELP] C++ ASCII Konvertierung

04/06/2013 23:49 H4rtzer#1
Hallo!

Ich möchte bzw. muss an eine Funktion (findwindow()) einen String übergeben. Dieser enthält jedoch ein 'ä' und 'ä' steht ja bekanntlich nicht in der ASCII Tabelle. Wie also kann ich das ä mit der Funktion kompatibel machen.

Meine Funktion: FindWindow(NULL, "Solitär"). Ich habe schon alles Mögliche versucht. Auch wenn ich versuche das 'ä' in einen Char zu schreiben, spuckt mir der Compiler einen Fehler aus. Ich benutze den MinGW G++ der aktuellen Version.

Code:
char ae = 'ä'

Fehler: Zeichenkontante mit mehreren Zeichen [multichar]
Fehler: Überlauf in impliziter Konstantenkonvertierung [overflow]
Mit der Lösung des Problems würde ich euch sehr dankbar sein!^^
04/07/2013 00:11 Dr. Coxxy#2
FindWindowW(L"Solitär");
04/07/2013 00:57 H4rtzer#3
Habe ich schon versucht, funktioniert allerdings nicht!

Fehler: Das Argument vom Typ ""const char *"" ist mit dem Parameter vom Typ ""LPCWSTR"" inkompatibel.
04/07/2013 00:58 Dr. Coxxy#4
was hältst du davon mal meinen code abzutippen?
04/07/2013 01:28 marykillsjane#5
Quote:
Originally Posted by H4rtzer View Post
Habe ich schon versucht, funktioniert allerdings nicht!

Fehler: Das Argument vom Typ ""const char *"" ist mit dem Parameter vom Typ ""LPCWSTR"" inkompatibel.
Du musst den Zeichensatz auf "Multibyte Zeichensatz " umändern soweit ich das noch richtig in Erinnerung habe. Das geht bei Visual C++ 2010 mit einem Rechtsklick auf das Projekt ,dann auf Eigenschaften und dann musst du den Zeichensatz von Unicode auf Multibyte umstellen.

Edit : Stimmt doch nicht habs grad nochmal aus Neugier in meine Ide eingefügt :
FindWindow(NULL,L"Solitär");
Kompilliert er auch mit dem Unicode Zeichensatz der normalerweiße eingestellt ist.
04/07/2013 02:09 Schlüsselbein#6
Statt L"foo" besser _T("foo"), T("foo") oder TEXT("foo") benutzen.
04/07/2013 10:20 H4rtzer#7
Quote:
Originally Posted by Dr. Coxxy View Post
was hältst du davon mal meinen code abzutippen?

Das Habe ich gemacht und den obenstehenden Fehler erhalten.

Quote:
Originally Posted by marykillsjane View Post
Du musst den Zeichensatz auf "Multibyte Zeichensatz " umändern soweit ich das noch richtig in Erinnerung habe. Das geht bei Visual C++ 2010 mit einem Rechtsklick auf das Projekt ,dann auf Eigenschaften und dann musst du den Zeichensatz von Unicode auf Multibyte umstellen.

Edit : Stimmt doch nicht habs grad nochmal aus Neugier in meine Ide eingefügt :
FindWindow(NULL,L"Solitär");
Kompilliert er auch mit dem Unicode Zeichensatz der normalerweiße eingestellt ist.
Damit hast du vollkommen recht und es funktioniert auch in der IDE. Aber wie mache ich das mit dem MINGW Compiler oder mit dem Microsoft Optimierungscompiler über die Konsole?
04/07/2013 18:30 MrSm!th#8
Quote:
Originally Posted by marykillsjane View Post
Du musst den Zeichensatz auf "Multibyte Zeichensatz " umändern soweit ich das noch richtig in Erinnerung habe. Das geht bei Visual C++ 2010 mit einem Rechtsklick auf das Projekt ,dann auf Eigenschaften und dann musst du den Zeichensatz von Unicode auf Multibyte umstellen.

Edit : Stimmt doch nicht habs grad nochmal aus Neugier in meine Ide eingefügt :
FindWindow(NULL,L"Solitär");
Kompilliert er auch mit dem Unicode Zeichensatz der normalerweiße eingestellt ist.
Das ist absoluter Stuss. Wenn man explizit FindWindowW nimmt, ist egal, welcher Zeichensatz eingestellt ist. Wenn man FindWindow nutzt, dann muss man eben gerade Unicode als Zeichensatz einstellen, immerhin willst du ja auch einen L""(Unicode)-String übergeben.

Quote:
Originally Posted by H4rtzer View Post
Das Habe ich gemacht und den obenstehenden Fehler erhalten.
Dann hast du einen total beschissenen Compiler oder eben nicht 1:1 abgetippt.

Nochmal:


Code:
FindWindowW(NULL, [B][U]L[/U][/B]"Solitär");
04/07/2013 18:55 Schlüsselbein#9
Bzw. gleich FindWindow(NULL, T("Solitär")) benutzen und die Makros arbeiten lassen. Das funktioniert unabhängig vom eingestellen Zeichensatz.

Wers sich ganz einfach machen will, greift zur Lösung meines Vorposters.
04/07/2013 21:28 Dr. Coxxy#10
Quote:
Originally Posted by Schlüsselbein View Post
Bzw. gleich FindWindow(NULL, T("Solitär")) benutzen und die Makros arbeiten lassen. Das funktioniert unabhängig vom eingestellen Zeichensatz.

Wers sich ganz einfach machen will, greift zur Lösung meines Vorposters.
du verstehst schon, dass sein projekt offensichtlich auf multibyte zeichensatz eingestellt ist, deine lösung also automatisch die FALSCHE funktion aufrufen wird?
er will ja grade explizit die W-funktion aufrufen, damit umlaute erkannt werden.
04/07/2013 22:56 Schlüsselbein#11
Quote:
du verstehst schon, dass sein projekt offensichtlich auf multibyte zeichensatz eingestellt ist, deine lösung also automatisch die FALSCHE funktion aufrufen wird?
Ja, jetzt schon. Vergesst mein geblubber, hab den Opener nicht richtig gelesen und bin wohl noch zu verstrahlt.