WinApi Problem

02/10/2011 19:00 ZackBlack#1
Hi,
hab keine Ahnung wieso das hier nicht geht. Es lässt sich kompilieren aber es macht nichts, also es erscheint kein Fenster.
Hab ich von hier: [Only registered and activated users can see links. Click Here To Register...]
02/11/2011 01:09 5769854332#2
probiers mal ohne das A in CreateWindowA (so wie im tutorial).
Oder hol dir Ollydbg und check die Return Values der APIs (RegisterClass, CreateWindow und ShowWindow). :p
02/11/2011 13:51 Strean#3
Mit C&P Lernst du NULL versuch lieber dir erstmal alles genaustens durchzulesen ;)

vlt merkst du dann deinen Fehler und ansonsten wie gesagt die return werte checken
02/11/2011 14:34 ddl#4
Tausch mal
ShowWindow(hWnd, iCmdShow);
zu
ShowWindow(wnd, SW_SHOWNORMAL);
02/11/2011 19:12 ZackBlack#5
Danke für die Antworten, werd ich morgen probieren. Die return Werte kann man die auch im VisualC++ debugger nachlesen? Zum c&p, naja, hab es teilweise abgetippt dann aber dann c&p gemacht als es nicht ging.^^
Naja, geht noch nicht return Werte hab ich noch nicht angeschaut, werd aber mal Visual C++ neuinstallieren, oder es mal mit nem anderen Compiler versuchen. Hab mal getestet, das Programm läuft nur das Fenster will nicht. So jetzt mal was hinzugefügt damit ich weiß was nicht geht:
Wenn das Fenster erstellen oder Klasse registrieren nicht geht bennent es ein Fenster Namens "Computer" um. Hab nur noch nicht herausgefunden welches der beiden nicht geht, da stehen statt dem gewünschten "Error: CreateWindow" chinesische Zeichen oder so :D. *flame*
Kann pls mal jemand kompilieren und schauen obs bei ihm geht?
Sagt jemanden das aus Ollydbg c&p Zeug was?
Registers:
Das da stand auch da:
02/14/2011 00:45 5769854332#6
Weils noch keiner geschrieben hat...
Statt debuggen kannste auch If-Statements benutzen àla: IF hWnd == NULL then MessageBox(...).

Hm vielleicht liegts daran, dass sich (LPCWSTR)szAppName (w=>Unicode) und CreateWindowA (A=> ANSI) nicht vertragen.
02/16/2011 15:51 ZackBlack#7
Quote:
Originally Posted by Kiakar View Post
Weils noch keiner geschrieben hat...
Statt debuggen kannste auch If-Statements benutzen àla: IF hWnd == NULL then MessageBox(...).

Hm vielleicht liegts daran, dass sich (LPCWSTR)szAppName (w=>Unicode) und CreateWindowA (A=> ANSI) nicht vertragen.
"Weils noch keiner geschrieben hat" weis ich jetzt nicht auf was sich das bezieht.^^ Das if-Zeug hab ich ja gemacht, wie gesagt n anderes Fenster umbennenen(Messagebox noch nicht probiert). Also mir sagt der Compiler szAppName wäre nicht mit dem Parameter vom Typ LPCWSTR kompatibel, daher muss ich die A-Funktionen benutzen oder casten. Das tat er auch beim Fenster umbennen, da hab ich auch gecastet, vlt deshalb die chinesischen Zeichen:D. Werd das Zeugs jetzt mal mit Messageboxen probieren. Ok, hab es jetzt zwar nicht mit Messageboxen probiert, aber statt cast die A-Funktionen benutzt(SetWindowTextA^^). Es scheitert schon an RegisterClassEx, hWnd = 0. Das heist ja Fehler nicht?
02/16/2011 16:19 MrSm!th#8
Das ist Blödsinn, A Funktionen funktionieren nicht mit LPCWSTR, das ist der Zeiger für Unicode Strings, klar, dass da japanische zeichen bei rauskommen.
02/16/2011 16:28 ZackBlack#9
Quote:
Originally Posted by MrSm!th View Post
Das ist Blödsinn, A Funktionen funktionieren nicht mit LPCWSTR, das ist der Zeiger für Unicode Strings, klar, dass da japanische zeichen bei rauskommen.
Mein Compiler behauptet ja, szAppName wäre LPCSTR hab vorher auf LPCWSTR gecastet, daher chinesische Zeichen. Jetzt A-Funktion benutzt die ja für LPCSTR gedacht ist. Hat jemand ne Ahnung was da an RegisterClass nicht geht? Hab auch schon RegisterClassExA versucht.
02/16/2011 18:35 5769854332#10
Du kannst das A generell weglassen (der Geschwindigkeitsverlust ist minimalst).

Bei mir funktioniert das Programm:

Liegts an den Compiler Optionen?
z.B. GUI Application <--> Console Application
02/16/2011 18:45 ZackBlack#11
Quote:
Originally Posted by Kiakar View Post
Du kannst das A generell weglassen (der Geschwindigkeitsverlust ist minimalst).

Bei mir funktioniert das Programm:

Liegts an den Compiler Optionen?
z.B. GUI Application <--> Console Application
Danke fürs Testen.
Hab Visual C++ -> Win32 Projekt. Hab Visual C++ und Runtime etc alles schon mal neuinstalliert, geht weiterhin nicht. Werd jetzt nochmal probieren ohne A und so.
HAb jetzt exakt alles c&pt aus deinem Post, neues Win32-Projekt erstellt, leeres Projekt ausgewählt & folgende Fehlermeldungen bekommen:
02/16/2011 19:15 .BritainAndy#12
"Textausgabe im Anwendungsbereich"; änder mal zu L"Textausgabe im Anwendungsbereich";


damit sollte der fehler >c:\users\benjamin\documents\visual studio 2010\projects\winapitesttut\winapitesttut\lolmain. cpp(24): error C2440: '=': 'const char [33]' kann nicht in 'LPCWSTR' konvertiert werden
weggehen
02/17/2011 16:07 ZackBlack#13
Quote:
Originally Posted by .BritainAndy View Post
"Textausgabe im Anwendungsbereich"; änder mal zu L"Textausgabe im Anwendungsbereich";


damit sollte der fehler >c:\users\benjamin\documents\visual studio 2010\projects\winapitesttut\winapitesttut\lolmain. cpp(24): error C2440: '=': 'const char [33]' kann nicht in 'LPCWSTR' konvertiert werden
weggehen
Naja, nicht wirklich, da kommt nur ein Error mehr.
Code:
1>c:\users\benjamin\documents\visual studio 2010\projects\winapitesttut\winapitesttut\lolmain.cpp(7): error C2440: 'Initialisierung': 'const wchar_t [33]' kann nicht in 'const char []' konvertiert werden
1>          Es gibt keinen Kontext, in dem diese Konvertierung möglich ist
JA! Es funktioniert endlich. Irgentwo in Projektmappeneigenschaften statt Unicode nicht festgelegt gewählt.
Danke für die Hilfe.