reguläre DLL mit MFC



  • Hiho Leutz,

    ich hab ein ganz normales DLL-Projekt erstmal ohne MFC und nutze die DllMain als Eintrittspunkt.
    Nun muss ich eine statische Lib dazu linken, welche MFC nutzt. Also habe ich das DLL Projekt in den Eigenschaften auch auf MFC gestellt.
    So nun hatte ich anfangs immer Linkerfehler, dass DllMain schon definiert ist. Das habe ich wegbekommen, indem ich die defines _USRDLL and _WINDLL entfernt habe. Nun kommt aber immer folgender Linkerfehler:

    uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) ist bereits in libcpmtd.lib(newaop.obj) definiert.
    Bibliothek "D:\Quellcode\CPP\ZIS\RobCal\Debug\NiDaqMeasure.lib" und Objekt "D:\Quellcode\CPP\ZIS\RobCal\Debug\NiDaqMeasure.exp" werden erstellt.
    D:\Quellcode\CPP\ZIS\RobCal\Debug\NiDaqMeasure.dll : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.

    Die Eigenschaft Codegenerierung->Laufzeit stimmt bei beiden Projekten überein(MFC statisch gelinkt, Multithreaded debug). Ich hab keine Idee, wie ich das wegkriege. Geht das in diesem Fall überhaupt?


  • Mod

    Das ist faslch diese defines zu entfernen. Die MFC lifert eine eigene DllMain die auch benötigt wird.

    Dein DllMain Code muss in das entsprechende CWinApp Objewkt hinein, das Du dann anlegst. Dort benutzt Du die Methode InitInistance!



  • Na ok dann also doch so.

    Was mich gewundert hat: ich hatte ein DLL-Projekt mal mit der VS 2005 Express erstellt und das später im VS Standard genutzt und von der MFC die Multithreading-Komponenten benutzt, also nachträglich dann noch die MFC statisch gelinkt. Dort funktioniert das wunderbar. Dort sind auch die defines nicht gesetzt udnd ich nutze meine eigene DllMain. Da meckert weder Compiler noch Linker, aber sobald ich dann die statische Lib dazu linke kracht es.
    Naja gut muss ich mal umbauen.

    Thx für die Antwort.


  • Mod

    Evtl. ist diese andere statische LIB evtl. für die dynmaische MFC gebaut.

    An den Compiler Schaltern und defines rumbiegen ist in jedem Falle falsch!


Anmelden zum Antworten