DllMain doppelt definier?



  • Hallo zusammen,

    ich habe eine Dll erstellt (VC++ unter VS 2005). Nun wollte ich den eigenen Pfad der DLL herausfinden, was man ja für gewöhnlich in der DllMain abhandeln muss:

    BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
    {
      if (dwReason == DLL_PROCESS_ATTACH)
      {
        char ModuleName[2048];
        DWORD size = GetModuleFileName((HMODULE)hModule, ModuleName, sizeof(ModuleName));
        if (size > sizeof(ModuleName) || size == 0)
        {
          ModuleName[0] = '\0';
        }
        else
        {
          PathRemoveFileSpec(ModuleName);
        }
        g_DllDir = ModuleName;
      }
      return TRUE;
    }
    

    Ursprünglich verfügte die Dll ja nur über eine _tmain-Funktion (vom Assistenten so generiert). Jetzt, nach Ergänzung der DllMain-Funktion meckert der Linker beim Übersetzen im Release-Mode mit folgender Meldung:

    mfcs80.lib(dllmodul.obj) : error LNK2005: _DllMain@12 ist bereits in MeineBspLib.obj definiert.
    

    (MeineBspLib ist meine DLL mit der neuen DllMain-Funktion)
    Im Debug-Mode wird alles fehlerfrei übersetzt. Im Release-Mode jedoch nicht.
    Die Konfigurationen für beide Modes stimmen weitestgehend überein.

    Was kann ich tun? Ich brauche die DllMain hier, um den Pfadnamen der Dll zu bekommen - oder kennt da jemand noch eine Alternative?

    Besten Dank bereits im Voraus für hilfreiche Tipps
    Wes


  • Mod

    Bei einer Dll mit der MFC musst Du die wie bei einer EXE eine eigene von CWinApp abgeleitete Klasse bauen. Diese wird bei Laden der DLL instanziiert und InitInstance wird aus´geführt.

    Die DllMain ist innherhalb der MFC selbst verwendet. Du darfst Sie nicht überschreiben und kannst dies auch nicht. Das Framework stellt die entsprechende Funktion. Du erzeugst nur die entsprechenden Klassen.


Anmelden zum Antworten