Fehlerbehebung? LNK 2001 LNK 1120



  • Hallo erstmal, ich hoffe das ich mich nach ausführlichem Beschäftige mit der Suchfunktion und dem gestrigen Tag mit dem MSDN hier nicht doch etwas überflüssiges Poste.

    Ich habe nicht viel Ahnung von C++ und mühe mich noch mit anfängen rum. Vorgestern habe ich aus dem Buch von Christan Roussel Visual C++ und DirectX 9 eine Passage (Capitel 12) durchgearbeitet bei der es für mich erstmalig an die Win32 Anwendung ging. Dabei habe ich gelernt (bzw. ich sollte lernen 😉 ) wie man ein erstes Windows Fenster erstellt. Ohne Vorwissen waren da ein haufen neuer Befehle für mich, die ich hier hoffentlich nicht aufzuzählen brauche.

    Folgendes Sagt mir das Buch:

    return CreateWindowEx(NULL,                   // Keine erweiterten Stile nutzen
                              "WindowClass",          // Klassenname
                              "Hello Windows",        // Fenstertitel
                              WS_OVERLAPPEDWINDOW |   // Fenster
                              WS_VISIBLE,             // Eigenschaften
                              100, 100, 400, 300,     // Anfangsposition und Größe
                              NULL,                   // Handle des Elternfensters
                              NULL,                   // Handle des Menüs
                              hInstance,              // Anwendungsinstanz
                              NULL);                  // wird nicht benötigt
    

    Es heißt im Buch selber ich kann an der Stelle für die Fenster-Eigenschafften in MSDN einige Varianten finden. Interessiert und neugierig wie ich war habe ich also Herumexperimentiert. Dabei habe ich unter andere Folgenden Befehl ausführen lassen:

    /*WS_OVERLAPPEDWINDOW |*/	// Fenster ...
    WS_VISIBLE | WS_POPUPWINDOW,	// ... Eigenschaften
    

    Dies bewirkte kein neues Fesnter aber irgendetwas muß passiert sein, den seit ich an dieser Stelle im Programmcode herumexperimentiert habe erhalte ich folgende Fehlermeldung:

    --------------------Konfiguration: HelloWindows - Win32 Debug--------------------
    Linker-Vorgang läuft...
    LIBCD.lib(crt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _main
    Debug/HelloWindows.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    HelloWindows.exe - 2 Fehler, 0 Warnung(en)

    Wie schon erwähnt führte die ausführliche Suche in MSDN auf eine Menge von Fehlern von dennen ich nicht einmal 50 % verstehe geschweige denn 10 % umsetzen könnte. Als Konsequenz habe ich es mit der Löschung der verantwortlichen Datei (HelloWindows.cpp - sowie alles dazugehörige) versucht und als auch das nichts half habe ich eine Neuinstallierung von Visual C++ 6.0 Autors Edition vorgenommen. Nach wie vor kann ich zwar Win32 Konsolenanwendungen verwenden jedoch bei jeder beliebigen form von Win32- Anwendung wird der oben aufgezählte Fehler angezeigt.

    Ich bin am verzweifeln leider habe ich keinen in meinem Umfeld der sich für solcherlei Sachen interessiert und meine Kommiltonen sind ebenfalls im Urlaub.

    Kann mir irgendwer helfen mein C++ wieder zum laufen zu bringen?

    Greets Mindmover



  • Der Fehler heißt, du hast eine Funktion im Header deklariert, aber nicht im Cpp geschrieben.

    Wo in deinem Programm ist denn überall _main?



  • Also ich habe leider kein Internet zuhause sonst würde ich jetzt nachschauen. Aber genau der Punkt hatte mich auch gestört und ich glaube festgestellt zu haben das ich diesen Befehl _main nirgends verwendet habe. Aber selbst wenn ich ihn verwendet hätte was könnte ich denn damit tun?

    Greets Mindmover



  • Was du tun kannst? Nicht benutzen. 😉

    Im Ernst: Ich glaube, du hast eher ein Problem mit C++ bzw. der WinAPI.
    Der Code sieht jedenfalls nur wenig nach MFC aus. 😕

    Hast du denn noch eine ältere Version deines Quellcodes? Eine wo es noch compiliert?
    Wenn ja, nimm die und untersuche mal, was du geändert hast (geht mit Beyond Compare) oder versuch, die Änderungen nochmal zu machen. Vielleicht hast du einfach eine Zeile gelöscht oder so.

    Wenn du keine alte Version mehr hast, fallen mir zwei Sachen ein:
    Du kommentierst die "böse" Stelle aus, was dir aber wohl nicht viel helfen wird.
    Oder du fängst nochmal ein neues Projekt an und versuchst gleich den Befehl einzubauen. Vielleicht behakten sich da alte Versuche mit dem aktuellen.

    Sonst bin ich so auf Entfernung eher ratlos. 😞



  • estartu_de schrieb:

    Was du tun kannst? Nicht benutzen. 😉

    Im Ernst: Ich glaube, du hast eher ein Problem mit C++ bzw. der WinAPI.
    Der Code sieht jedenfalls nur wenig nach MFC aus. 😕

    Das wäre möglich wie gesagt bin ich noch unwissender Anfänger. Wenn nötig verschiebe mich einfach ins richtige Forum, Danke!

    estartu_de schrieb:

    Hast du denn noch eine ältere Version deines Quellcodes? Eine wo es noch compiliert?
    Wenn ja, nimm die und untersuche mal, was du geändert hast (geht mit Beyond Compare) oder versuch, die Änderungen nochmal zu machen. Vielleicht hast du einfach eine Zeile gelöscht oder so.

    Wenn du keine alte Version mehr hast, fallen mir zwei Sachen ein:
    Du kommentierst die "böse" Stelle aus, was dir aber wohl nicht viel helfen wird.
    Oder du fängst nochmal ein neues Projekt an und versuchst gleich den Befehl einzubauen. Vielleicht behakten sich da alte Versuche mit dem aktuellen.

    Sonst bin ich so auf Entfernung eher ratlos. 😞

    Das Befürchte ich auch. Wie schon erwähnt ich habe dannach versucht die Stelle umzuschreiben und auszukommentieren auch de Urspüngliche Form hat immer wieder den Fhler hevorgerufen.

    Was ich viel Fataler finde ist das es eben auf ALLE Win32-Anwendungen zutrifft. Ich kann praktisch nur noch mit Win32-Konsolenanwenungen arbeiten, da selbst eine Neinstallation von VC++ nichts gebracht hat.

    Hier habe ich im übrigen nochmal die Funktion gefunden aus der ich vorhin den Teilcode rausgerissen habe:

    HWND CreateMainWindow(HINSTANCE hInstance) 
    { 
       WNDCLASSEX wndClass = 
       { 
          sizeof(WNDCLASSEX),                  //Groesse angeben 
          CS_DBLCLKS | CS_OWNDC |               //Standardstile 
          CS_HREDRAW | CS_VREDRAW, 
          MessageHandler,                     //Callback-Funktion 
          0,                              //Zusätzliche Angaben 
          0,                              //nicht benötigt 
          hInstance,                        //Anwendungsinstanz 
          LoadIcon(NULL, IDI_WINLOGO),         //Windows-Logo 
          LoadCursor(NULL, IDC_ARROW),         //Normaler Cursor 
          (HBRUSH)GetStockObject(WHITE_BRUSH),   //Weisser Pinsel 
          NULL,                           //kein  menü 
          "WindowClass",                     //Der Name der Klasse 
          LoadIcon(NULL, IDI_WINLOGO)            //Windows-Logo 
       }; 
    
       //Fensterklasse registrieren, damit sie von CreateWindowEx() 
       //verwendet werden kann 
    
       RegisterClassEx(&wndClass); 
    
       //Der Rückgabewert von CreateWindowEx() ist auch der Rückgabewert 
       //der Funktion 
    
       return CreateWindowEx( 
          NULL,                        // Ohne erweiterte Stile 
          "WindowClass",                  //Klassenname 
          "HelloWin",                     //fenstertitel 
          WS_OVERLAPPEDWINDOW | WS_VISIBLE,   //fenster-Eigenschaften 
          100,                        //oben Links 
          100,                        //oben Links 
          300,                        //Breite 
          400,                        //Hoehe 
          NULL,                        //Elternfenster 
          NULL,                        //Menü 
          hInstance,                     //Anwendungsinstanz 
          NULL);                        //nicht benötigt 
    }
    


  • Mindmover schrieb:

    LIBCD.lib(crt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _main

    Du hast statt einer Win32-Anwendung eine Win32-Konsolenanwendung erstellt.



  • MFK schrieb:

    Mindmover schrieb:

    LIBCD.lib(crt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _main

    Du hast statt einer Win32-Anwendung eine Win32-Konsolenanwendung erstellt.

    Ärm...wie bin ich den da hingekommen? Naja danke ich werd mir das nochmal anschauen hab auch in einem anderen Forum nochmal ein paar Anregungen bekommen ich hoffe das Problem jetzt lösen zu können.

    Danke für die Hilfe!


Anmelden zum Antworten