STL Klassen in DLLs benutzen
-
Hallo alle.
Ich kaue derzeit an einem Problem, zu dem ich absolut keine Lösung finde:
Ich habe zwei Klassen: Klasse Point und Klasse Polygon. Es ist eine recht einfache Repräsentation: das Polygon besteht aus einer Liste von Punkten. Um diese Liste zu realisieren, habe ich die STL-KLasse std::vector konsultiert. Aber leider liegt genau darin das Problem.
Da ich die Polygon-Klasse (und andere) zu einer DLL kompiliere, welche ich in einem anderen Programm benutze(n muss), crasht mein Testprogramm immer, sobald ich die Polygon-Klasse aus der DLL benutze.
Durch Probieren habe ich herausgefunden, dass es an der STL-Klasse liegt. Ähnlicher Murks tritt auch auf, wenn ich std::string nutze.Durch Googlen bin ich nur auf eine Stelle gestoßen, die mir in knappen Worten mitteilte, dass man die Definition EXP_STL benutzen soll, wenn mal STLs in DLLs benutzen mag. Aber das half leider gar nichts.
Also, die Frage könnt ihr euch schon denken: Was muss man beachten/einstellen/heraufbeschwören, wenn man STL-Klassen in einer DLL benutzen mag?
Hier Code-Beispiele:
Die DLL:
#define DLLEXPORT __declspec(dllexport) #include <vector> #include "point.h" class DLLEXPORT Polygon { ... protected: std::vector<Point> points; //Dies ist die Knackstelle //std::string testString; //auch dies crasht bei der Ausführung }; ...Dann im Testprogramm (eine EXE):
#include "polygon.h" //DLLimport-Header int main(int argc, char** argv) { Polygon poly(); cout << "Programm Ende" << endl; return 0; }Ich bitte zu bedenken, dass beide Sachen einwandfrei kompilieren und sogar das Testprogramm durchläuft (das "Programm Ende" wird ausgegeben). Jedoch kommt immer einer Speicherschutzverletzung.
Ich entwickle unter WinXP mit MS Visual C+++ 2005 Express Edition.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.