PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eine DLL für mehrere Visual Studio Versionen?


mekakic
2013-07-22, 13:03:27
Ich habe eine simple DLL unter VS2010/Win7 gebaut und ein Kumpel möchte die unter Visual Studio 2003/XP verwenden. Ich habe diesen Schritt bei mir ausprobiert und er hat funktioniert. Bei ihm stürzt dann bei Verwendung von STL Komponenten und nicht mal DLL Calls seine Software ab.

Macht es einen Unterschied bei der Codegenerierung? Macht es einen Unterschied ob man Release oder Debug DLL unter einer anderen Version verwendet. Funktioniert das in der Praxis nicht... ich dachte das wäre gerade der Vorteil von DLL Kompilaten?

Monger
2013-07-22, 13:54:31
Visual Studio interessiert sich grundsätzlich nicht dafür, mit welchem Visual Studio (oder irgendeiner anderen Entwicklungsumgebung) eine DLL erstellt wurde. Wichtig sind halt die Abhängigkeiten, entweder zur Version des .NET Frameworks (2.0 , 3.5, 4.0 ...) oder der Plattform (x86 oder x64). Diese Abhängigkeiten können natürlich auch indirekt existieren, also z.B. durch Abhängigkeit zu einer Dritthersteller DLL, die selber 3.5 erfordert. Richtig kompliziert wird es dann mit nicht .NET DLLs, also z.B. COM, oder sogar irgendwas nativem.

Fehlermeldung wäre halt hilfreich, dann könnte man was genaueres sagen.

Edit: das gilt natürlich für das fertige Kompilat. Unterschiedliche Visual Studio Versionen können durchaus unterschiedlichen Code erzeugen, auch für das selbe .NET Framework. Aber nichts was die Kompatibilität in der selben Framework Version brechen würde.

mekakic
2013-07-22, 14:01:39
Danke! Die DLL setzt auf der grünen Wiese auf, die einzige Abhängigkeit besteht aktuell wenn ich das richtig sehe an <stdexcept> und <string>. Aktuell stürzt die Software ab, wenn in der Software (außerhalb der DLL) den Dtor eines stringstream aufgerufen wird. Dies passiert nebenbei auch, wenn nur die stub-DLL gelinked ist und keine Header angezogen wurde oder irgendwelcher Code aufgerufen wurde.

Nighthawk13
2013-07-22, 14:07:08
Die mitgelieferten STL-Implementierungen sind nicht kompatibel zwischen verschiedenen Visual Studio Versionen, und zwischen Debug/Release. (Checked Iterators z.b.)

mekakic
2013-07-22, 14:25:10
Bedeutet das, dass ich auch keinen std::string in einer DLL Interfacemethode verwenden darf? Was die DLL hinter dem Interface verwendet, solange es nicht sichtbar ist, dürfte doch egal sein, oder?

Nighthawk13
2013-07-22, 14:48:59
Bedeutet das, dass ich auch keinen std::string in einer DLL Interfacemethode verwenden darf? Was die DLL hinter dem Interface verwendet, solange es nicht sichtbar ist, dürfte doch egal sein, oder?
Beides richtig. Am pflegeleichtesten sind Plain-C libs(im Interface), die gehen eigentlich immer, auch von anderen Sprachen wie Java usw.

mekakic
2013-07-23, 13:25:13
Danke... STL aus dem Interface rausgeworfen und keine Probleme mehr gehabt.