main function bei mfc Anwendungen?



  • Hallo Leute,
    habe wahrscheinlich die dümmste Frage aller Zeiten: Ich habe gerade zum ersten Mal mit VC++ 6 nach Vorlage eine dialogbasierte mfc-Anwendung erstellt. Nun benötigt ja jede C++-Anwendung eine main function. Dachte ich jedenfalls bisher. In alles source-files meiner ersten mfc-Anwendung habe ich aber keine gefunden. Wo ist also hier der eigentliche Programmstart?

    Danke im Voraus 😕



  • es gibt sie.. sie wird vor dir verborgen...

    http://home.wtal.de/ranzurmall/visualc/grundo.htm



  • Nein, eine Windowsanwendung braucht nicht zwangsweise eine main-Funktion, zumindest nicht in der herkömmlichen "offenen" Form. Bei den vom Klassenassistenten erstellten MFC-Programmen ist es so, dass eine Application-Klasse von CWinApp abgeleitet und eine globale Instanz davon erstellt wird. Im Konstruktor bzw. vielmehr in der Funktion InitInstace dieser Klasse (die meiner Meinung nach vom Konstruktor aufgerufen wird) wird dann das Programm abgearbeitet... also z.B. das Dialogfeld einer MFC-Dialoganwendung erstellt und gestartet.



  • Na, der Text ist wohl falsch.

    Diese Funktion gibt es aber trotzdem. In einem MFC Programm müssen Sie die Funktion WinMain nicht selbst implementieren, sie wird vom AppWizard(Anwendungsassistent) generiert, jedoch von Ihnen verborgen gehalten.

    Die WinMain wird nicht vom AppWizard generiert, sondern ist einfach im MFC Quellcode/Library vorhanden. Wenn du die Professional oder Enterpriseversion von Visual C++ hast, kannst du mal selbst im Quellcode der MFC nachschauen.

    // appmodul.cpp
    
    extern "C" int WINAPI
    _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
        LPTSTR lpCmdLine, int nCmdShow)
    {
        // call shared/exported WinMain
        return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
    }
    


  • na wenigstens habe ich durch den link eine diskussion ausgelöst *grins*



  • Vielen Dank an alle,

    sieht so aus als habt ihr mir viel Detektiv-Arbeit gespart 😃



  • Starte die Anwendung einfach statt mit F5 mit F10.
    Dann kannst du Schritt für Schritt sehen was am Anfang aufgerufen wird. (Mit F11 kann man in eine Funktion dann reingehen)


Anmelden zum Antworten