'WinMain' : function cannot be overloaded
-
Hallo.
Ich bin noch ein ziemlicher Anfänger, was C++ angeht. Nachdem ich zuvor immer Dev-C++ verwendet habe, bin ich jetzt mal auf Empfehlung nach Visual C++ 2005 umgestiegen. Bisher konnte ich mich nicht mit dem Programm anfreunden (fängt schon mit ewig langer Installation an, und dann noch so Extra-Maßnahmen, damit man WinAPIs zum Laufen bekommt).
So. Jetzt bin ich aber bei meinem ersten Beispiel-Programm auf ein Problem gestoßen, das ich im Übrigen auch bei fast allen WinAPI-Programmen bekomme.
#include <windows.h> int WINAPI WinMain(HINSTANCE hI, HINSTANCE, TCHAR*, int) { MessageBox(NULL, "Hallo", "", MB_OK); return 0; }Bei Dev-C++ läuft das Beispiel wunderbar. Bei Visual C++ habe ich noch (nach mehreren Fehlversuchen) das "MessageBox(NULL, "Hallo", "", MB_OK)" durch "MessageBox(NULL, L"Hallo", L"", MB_OK)" ersetzt (zusätzliches L vor den Strings. Hat irgendwas mit Unicode zu tun?) und noch "stdafx.h" eingebunden.
Allerdings bekomme ich die Fehlermeldung "'WinMain' : function cannot be overloaded". Wo ist das Problem? Dev-C++ scheint damit keine Probleme zu haben. Wenn Visual C++ weiterhin bei allem eine Extrawurst macht, bleibe ich bei Dev-C++.

Jack
PS: Ich habe das Programm als Windows Application erstellt, nicht als Konsolenanwendung.
-
Hi
,1. Falsches SubForum -> WinAPI .
2. Der Prototyp der WinMain sieht so aus:
int WINAPI WinMain(HINSTANCE, HINSTANCE, char*, int);Da Dev C++ standardmäßig kein UNICODE definiert, wird TCHAR* zu char* aufgelößt.
In der V C++ Express Edition ist aber UNICODE definiert, so das TCHAR* zu wchar_t aufgelößt wird. Da hast Du den ungültigen Overload. Denn der Parameter für die CommandLine ist niemals UNICODE.Ich würde außerdem statt L"..." immer das Makro TEXT("...") verwenden, da Du damit sowohl mit als auch ohne UNICODE arbeiten kannst. Das Makro passt das dann automatisch an
.
-
CodeFinder schrieb:
Da Dev C++ standardmäßig kein UNICODE definiert, wird TCHAR* zu char* aufgelößt.
In der V C++ Express Edition ist aber UNICODE definiert, so das TCHAR* zu wchar_t aufgelößt wird. Da hast Du den ungültigen Overload. Denn der Parameter für die CommandLine ist niemals UNICODE.Ich würde außerdem statt L"..." immer das Makro TEXT("...") verwenden, da Du damit sowohl mit als auch ohne UNICODE arbeiten kannst. Das Makro passt das dann automatisch an
.Danke für die schnelle und nette Antwort.

Ich habe WinMain jetzt mit deiner Hilfe in
"int WINAPI WinMain(HINSTANCE hI, HINSTANCE, CHAR*, int) { MessageBox(NULL, TEXT("Hallo"), TEXT(""), MB_OK); return 0; }umgewandelt. Jetzt funktioniert es wieder perfekt.
Danke nochmals,
Jack
-
Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.