Strings als Parameter wollen nicht so wie gedacht

@mschlegel: Du musst _T(…) für deine String-Literale verwenden. Als Datentyp für Strings nicht char benutzen, sondern _TCHAR.
Ok, für das Erstellen des Hauptfensters hat das funktioniert (CreateWindowEx), aber für das Erstellen der Buttons, etc funktioniert das nicht (CreateWindow). Das hatte ich aber auch schon im ersten Post erwähnt.

Was mich vor allem interessiert, warum muss man denn nun einen TCHAR nehmen? Ein simpler String wär doch viel einfacher (zumindest für mich :-) ). Aus der MSDN werd ich auch nicht schlau..das steht halt was von einem null-terminierten String (sehr hilfreich)


Ok, Fehler gefunden. Das mit _T("..") war korrekt, allerdings hatte ich dies nur für den 2. Parameter angewendet. Wenn ich auch den ersten Parameter mit einem _T() einpacke, dann klappts. :)

Hab inzwischen auch rausgefunden, dass es irgenwas mit UNICODE und ASCI zu tun hat, aber mal ehrlich..wieso wird überhaupt noch mit ASCI gearbeitet? Damit kann ich doch mein Progrämmlein dann auch weltweit vertreiben. Ich sehe da überhautp keinen Sinn drin ASCI zu verwenden. Aber gut, das ist auch nicht Thema dieses Post.

Nochmal Danke
 
Zuletzt bearbeitet:
Aber dennoch steht im Falle eines CreateWindow in der Fehlermeldung CreateWindowA...
Unwahrscheinlich. CreateWindow ist ein Makro, das zu CreateWindowA bzw. CreateWindowW ausgewertet wird. Das ist wiederum ein Makro, das in einen Aufruf von CreateWindowExA bzw. CreateWindowExW ausgewertet wird. Das geschieht alles im Präprozessor-Schritt, der Compiler kriegt also überhaupt kein CreateWindow oder CreateWindowA zu Gesicht.

Was mich vor allem interessiert, warum muss man denn nun einen TCHAR nehmen? Ein simpler String wär doch viel einfacher (zumindest für mich :-) ). Aus der MSDN werd ich auch nicht schlau..das steht halt was von einem null-terminierten String (sehr hilfreich)
TCHAR ist ein „simpler String“, wenn du nicht mit Unicode arbeitest. Dann ist TCHAR nämlich gleichbedeutend mit char. Andernfalls wird ein unsigned short bzw. wchar_t draus.

Grüße,
Matthias
 
Bei meinem Visual C++ ist das aber so :(
Dann setzt du vermutlich eine recht alte Version des Platform SDKs ein. Bei mir steht in der winuser.h jedenfalls:
C:
#define CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y,\
nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
CreateWindowExA(0L, lpClassName, lpWindowName, dwStyle, x, y,\
nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
#define CreateWindowW(lpClassName, lpWindowName, dwStyle, x, y,\
nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
CreateWindowExW(0L, lpClassName, lpWindowName, dwStyle, x, y,\
nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
#ifdef UNICODE
#define CreateWindow  CreateWindowW
#else
#define CreateWindow  CreateWindowA
#endif // !UNICODE

Grüße,
Matthias
 
Zurück