Problem: STL und DLL
-
Hallo Board,
Ich habe eine nicht MFC regular DLL, die STL benutzt und eine MFC Exe, die die DLL
benutzt. Das Problem ist, dass die Exe am Ende abschmiert, wo die stl Sachen deleted werden.Wenn ich in beiden Projekten die Option /MD oder /MDd mache, dann schmiert das nciht mehr ab, es werden aber tausende von Memoryleaks angezeigt, wo keine sind.
Anscheinend haben das Problem hunderte von Leuten, nur ich habe nach mehr als 3 Std immer noch keine Loesung gefunden, die Funktionieren wuerde.
Jemand eine Idee?
-
Probiers mal mit MTd für den Debug Modus und MT für den Release Modus.
MDd und MD brauchst du wenn die MFC-dlls (MFC71.dll,MSVCR71.dll,...)vom System benutzt werden sollen.
Mit den MemLeaks sollte das nicht viel zu tun haben.
Kleiner Tip um die MemLeak Fehler einzugrenzen. Schmeiss den dll Kram erstmal aus deinen Projekt raus und schau ob die Leaks im Hauptprogramm verursacht werden.
Sollte dies ohne Fehler beenden, kannst du im Idealfall die MemLeaks auf die dll zurückführen. Dann gilt es dort zu suchen.Zwei Funktion zum Debugen von MemLeaks:
_CrtDumpMemoryLeaks();
_crtSetBreakAlloc(Nr);Eine Fehlerprotokoll könnte aufschlussreich sein.
-
Hi,
die Compiler Option /Mt oder /Mtd oder jeder andere hilft nicht.
Ich habe ein Test gemacht: Eine nicht MFC DLL die eine einzige Klasse, die nichts ausser Konstruktor+Destruktor hat, exportiert. Memoryleaks immer noch..Wenn ich aber eine MFC DLL maceh passiert das nciht mehr.
Nachträgliche Änderung, dass MFC doch benutzt werden soll hilft auch nicht.
An STL lag es auch nicht, da die Klasse kein einziges STL Element nutzt.Ich muss jetzt nur aus dem Projekt 3 Dll's neu machen, sprich 3 neue Projekte, 3 MFC Dll's und dann nur noch den Kram in die DLL's kopieren.
Ist ziemlich blöd muss ich sagen. Micro$oft denkt sich wahrscheinlich, wenn man kein MFC benutzt, soll man sein Projekt erst gar nicht entwickeln können.
Hab ich schon erwähnt, dass ich M$ hasse? Das nächste Projekt wird mit gcc und g++ entwickelt..
-
Wurde die DLL mit der Gleichen STL Version kompiliert, wie du sie verwendest ?
Falls VC6.0 oder darunter, hast du die STL Fixes installiert ?Devil
-
devil81 schrieb:
Wurde die DLL mit der Gleichen STL Version kompiliert, wie du sie verwendest ?
Falls VC6.0 oder darunter, hast du die STL Fixes installiert ?Devil
Ich habe MS VC++ 6.0 SP 6 für alles benutzt.
Ich habe den ganzen STL Kramm entfernt und ohne STL ausprobiert, das selbe Verhalten. Also liegt es nicht an STL, sondern daran, das man eine nicht MFC DLL
benutzt hat.Alle nicht MFC DLL-Projekte als MFC DLL-Projekte neuerstellt und es funktionert alles..