Der STL ein __declspec(dllexport) verpassen
-
Funktioniert das dann eigentlich nur wenn exakt der gleiche Compiler mit exakt der gleichen Implementierung der STL verwendet wird ?
-
Original erstellt von Knuddlbaer:
Funktioniert das dann eigentlich nur wenn exakt der gleiche Compiler mit exakt der gleichen Implementierung der STL verwendet wird ?ist doch egal. man setzt die stl ja nicht wirklich deshalb ein, daß der code nachher auf ner anderen maschine mit nem anderen compiler laufen würde.
und selbst wenn, ein paar defines und die sachen klappt auf der eigenen maschine und auf fremden isse leicht anpaßbar.
nee. man verwendet die stl deshalb, weil die lieben kollegen sie kennen. man kann stl-container prima als schnittstellen verwenden und so.
-
natürlich nicht.
-
Auch wenns nu kein C++ Standard mehr ist,
ich frage weil es interesannt wäre ne DLL zu erstellen die dann unter VC und BC laufen soll und stl Objekte als schnitstelle haben. Ich habs nicht ausprobiert, deswegen die doofe Frage ob das gehen würde !?
-
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