Der STL ein __declspec(dllexport) verpassen
-
die dll muss neu kompiliert werden, dann gehts natürlich
-
k thx
-
wo ist volkards beitrag?
-
Original erstellt von <confused>:
wo ist volkards beitrag?wegen unfugs gelöscht.
-
Das funktioniert definitiv ohne solche Verrenkungen.
Das ist gut zu hören, das es auch einfacher geht aber es währe auch ganz nett gewesen wenn Du mir einen Tipp geben könntest, wie man es besser machen kann.
Das meine Lösung nicht so das wahre ist, hab ich mir auch schon gedacht. Aber wenigsten hab ich dabei etwas gelernt das ist ja auch schon mal was.
-
mach doch mal ein beispiel wo es bei dir nicht funktioniert. ich bin doch kein hellseher
-
na zum Beispiel so was:
DLL Code#include <vector> std::vector<int> __declspec(dllexport) getVector() { std::vector<int> t; t.push_back(100); t.push_back(200); t.push_back(300); return t; }
EXE Code
int mein(void) { std::vector<int> i = getVector(); return 0; } // Heap Fehler durch die Zerstörung von "i"
Kurz gesagt, jedesmal wenn ich ein STL-Objekt in der DLL verändere oder erstelle und es dann von der EXE aus zerstört wird, bekomme ich halt den Heap-Fehler. Obiges ist so ein Typische Beispiel dafür. Der Compiler wirft dann auch immer eine Warunung aus, das std::vector keine DLL-Anbindung hat. Sobald ich z.B. std::vector eine solche zuweise ist der Heap-Fehler schon weg
Es ist nun die Frage wie man das am einfachsten hinbekommt, den STL-Objekten eine DLL-Anbindung zu verpassen.
-
Baust du dein Programm mit Visual C++?
Ich habe (mit Version 6.0) einen ähnlichen Fehler bei Verwendung von Maps und Sets gehabt. Dies ist ein Bug in der von VC++ verwendeten STL-Implementierung. Unter http://www.dinkumware.com/vc_fixes.html findest du Patches hierzu. Bei mir hat es genügt, die Dateien dequeue, xstring und xtree herunterzuladen und die gleichnamigen Dateien von VC++ durch die neuen zu ersetzen, dann trat der Fehler nicht mehr auf.Stefan.
-
Es muß natürlich "deque" heißen.....
Stefan.
-
Diese Fixes sind jedoch für VC++ 5 und 6. Ich Arbeite hingegen mit VC++ 7 oder auch .NET genannt
-
Moin,
schau mal hier:
Debug Assertion failed bei delete
-
Danke das war der entscheidende Tipp