_tmain : undefined reference to winmain@16



  • ich habe mir bei winapi programmen mittlerweile angewöhnt den quelltext so zu schreiben dass er sich anpasst ja nach dem ob UNICODE aktiviert ist oder nicht. anstatt main() verwende ich dann auch _tmain() allerdings spuckt MSVS 2005ee immer folgenden fehler aus:

    MSVS 2005 schrieb:

    error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_WinMain@16" in Funktion "___tmainCRTStartup".

    selbst wenn _tmain nur so aussieht:

    int _tmain()
    {
       return 0;
    }
    

    eingebunden hab ich <windows.h> und <tchar.h>, beim Dev-C++ klappt jedoch alles fehlerfrei...

    Danke schonmal für eure Bemühungen 🙂



  • Vom Linker wird der Startcode für eine Windows-Anwendung eingebunden und dort heißt es:

    call _WinMain@16
    


  • was, zur hölle, ist '_tmain()' 😕

    du musst dein projekt auf 'console' stellen, dann ist 'main()' der einsprungspunkt, bei winapi-anwendungen ist es 'WinMain'
    🙂



  • hmm tja ... vista ... guck dir mal den Header tchar.h an ... dann weißt du auch was _tmain und _tWinMain ist 🙂



  • (D)Evil schrieb:

    hmm tja ... vista ... guck dir mal den Header tchar.h an ... dann weißt du auch was _tmain und _tWinMain ist 🙂

    achso, _tmain ist entweder 'main' oder 'wmain'.
    na, die denken sich ja komische sachen aus...
    🙂



  • will eure schöne diskussion nicht unterbrechen aber wie muss ichs denn jetzt richtig machen?



  • a) Du willst tatsächlich eine Konsolenanwendung schreiben -> Erstelle eine neue Win32-Konsolenanwendung und verwende dein _tmain() wie bisher

    b) Du wolltest eigentlich gerade damit beginnen ein "echtes" Windows-Programm zu schreiben -> die Einstiegsfunktion heißt dort WinMain() bzw. respektive _tWinMain()

    MfG SideWinder



  • genau, es soll eine konsolenanwendung werden! hier einfach mal die paar zeilen code:

    #include <windows.h>
    #include <tchar.h>
    //#include <iostream>
    
    int _tmain()
    {
    	return 0;
    }
    

    mit dem mingw (also dev cpp) klappts aber was muss ich bei MS VS 2005 express machen damit ich keinen linkererror bekomme?



  • wofür windows.h?

    Und du musst halt auf Console einstellen ... du hast Application im Moment gewählt ...



  • (D)Evil schrieb:

    wofür windows.h?

    Und du musst halt auf Console einstellen ... du hast Application im Moment gewählt ...

    Eventuell tchar.h erst nach windows.h, fix aber: Win32-Konsolenanwendung und nicht Win32-Anwendung als Projekttyp auswählen.

    MfG SideWinder



  • SideWinder schrieb:

    fix aber: Win32-Konsolenanwendung und nicht Win32-Anwendung als Projekttyp auswählen.

    MfG SideWinder

    weiss jemand auf die schnelle wie man das im nachhinein ändert? bestimmt unter projekt->eigenschaften... aber dann komm ich nicht weiter



  • Project|Properties|Configuration Properties|Linker|System|SubSystem



  • Jochen Kalmbach schrieb:

    Project|Properties|Configuration Properties|Linker|System|SubSystem

    super, funktioniert perfekt, danke euch allen 👍 👍 👍


Log in to reply