Linkerfehler DllMain already defined



  • Ich habe mit Dlls etwas experimentiert und bin auf ein Problem gestossen, das ich nicht verstehe. Vielleicht kann mir jemand helfen.

    Mit VS60 habe ich eine dynamische DLL erstellt. Not using MFC/use MFC statisch/use MFC dynamisch hab ich hin und her ausprobiert. Funktioniert super.
    Dann habe ich eine AfxMessagebox eingebaut. Diese braucht den Header <afxwin.h>
    Und schon gehts schief, LNK2005 (s.o.) kommt.

    Anscheinend bringt die <afxwin.h> eine DllMain mit?? Wie kann ich AfxMessagebox + eigene DllMain verwenden??
    Hier etwas Code:

    BOOL APIENTRY DllMain( HANDLE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)
    {
        switch (ul_reason_for_call)
    	{
       case DLL_PROCESS_ATTACH:
           if (lpReserved == NULL)   //dynamic load
           { 
               AfxMessageBox("DLL_PROCESS_ATTACH, dynamic load");
           }
           else     //static load 
           { 
               AfxMessageBox("DLL_PROCESS_ATTACH, static load");
           }
       	break;
        case DLL_THREAD_ATTACH:
            AfxMessageBox("DLL_THREAD_ATTACH");
       	break;
        case DLL_PROCESS_DETACH: 
            if (lpReserved == NULL)   //FreeLibrary was called
           {    
                AfxMessageBox("DLL_PROCESS_DETACH, FreeLibrary");
           }
           else    //process termination
           { 
               AfxMessageBox("DLL_PROCESS_DETACH, process termination");
           }
       	break;
        case DLL_THREAD_DETACH:
            AfxMessageBox("DLL_THREAD_DETACH");
       	break;
       default:
           AfxMessageBox("fdwReason = %x", ul_reason_for_call);
           ;
       }
        return TRUE;
    }
    

    Bitte jetzt nicht die Antwort: Dann nimm halt MessageBox!!


  • Mod

    Wenn Du mit der MFC eine DLL baust, dann musst Du Dich auch an die MFC gegebenheiten halten und die heißen: DllMain wird durch die MFC gestellt.

    Wenn Du eine reguläre MFC baust, dann wird Dir ein CWinApp Objekt geliefert. Dort in InitInstance erfolgt dnan Dein DllMain Aufruf.



  • ....das erklärt alles. Danke


Log in to reply