Unterschied zwischen WinMain und _tWinMain?



  • Huhu!
    Ich bin heute endlich vom uralten Visual Studio 6.0 auf das neue 8.0 umgestiegen.

    Neben vielen nützlichen tollen features fiel mir gleich auf, dass beim Erstellen eines Windows programmes ein _t vor der main funktion steht. (Bei konsolenprogrammen _tmain bei WinAPI programmen _tWinMain).

    Entferne ich das _t bei einem Konsolenprogramm, lässt es sich trotzdem normal kompilieren. Bei einem WinAPI programm erhalte ich die Fehlermeldung, dass das Überladen von WinMain nicht möglich sei. (Was sich nach ändern von LPTSTR lpCmdLine in LPSTR lpCmdLine beheben lässt)

    Ist zwar nur ne Kleinigkeit mit der ich Leben kann aber was soll das? Was hat sich Microsoft dabei gedacht?



  • Das sind *eigene* (also nur in MS-Compilern unterstützte) Zeichensatz unabhängige Versionen dieser Einsprungpunkt-Funktionen.

    Damit kannst Du (bei _tWinMain beispielweise) den Command-Line-String (vorletzter Parameter) direkt verwenden, da dieser einen Zeichensatz unabhängigen Typ hat ( ➡ LPTSTR). Bei _tmain ergibt sich das gleiche Szenario. Das t steht dabei eigentlich für TCHAR. Der Unterstrich bedeutet, dass es nichts 'offizielles' ist ⚠ .

    Bei einem WinAPI programm erhalte ich die Fehlermeldung, dass das Überladen von WinMain nicht möglich sei. (Was sich nach ändern von LPTSTR lpCmdLine in LPSTR lpCmdLine beheben lässt)

    Was daran liegt das die Funktion WinMain/_tWinMain/main/_tmain eine bestimmte festgelegte Sigantur hat, deswegen die Fehlermeldung. Da LPSTR als char* und LPTSTR entweder als wchar_t* (UNICODE) oder als char* (ANSI) definiert ist, wird hier die Sigantur implizit durch den Compiler geändert, die dann nicht mehr passt. Bei _tWinMain muss man also auch LPTSTR verwenden 💡 .

    Hoffe das war verständlich 😉 .


Anmelden zum Antworten