3 Stimmen

Kann eine mit Visual Studio 2008 kompilierte C++-DLL mit Visual Studio 2005 verwendet werden?

Ich werde mit einer C++-Bibliothek arbeiten, die in reinem C++ (nicht .NET und ohne MFC) geschrieben ist. Die Bibliothek ist sowohl kompiliert für Visual Studio 2005 / Intel Fortran 9.1 als auch für VS 2008 / Intel Fortran 10.1 verfügbar.

Offensichtlich werde ich die Binärdateien für VS 2008 herunterladen, da das die Umgebung auf meinem Computer ist, aber ich frage mich, ob es Gründe gibt, warum eine reine C++-Bibliothek nicht kompatibel zwischen VS 2005 und 2008 wäre. Ich würde davon ausgehen, dass das Namensmischen dasselbe wäre, aber vielleicht gibt es andere Gründe. Ich habe C++ schon lange nicht mehr verwendet, also bin ich ein wenig eingerostet, wenn es um diese Dinge geht.

3voto

Adam Rosenfield Punkte 373807

Es sollte wahrscheinlich funktionieren. Die DLL, die mit VS 2005 kompiliert wurde, hängt von der Implementierung der C-Standardbibliothek von VS 2005 (msvcr80.dll) ab, während Ihr Code von der C-Bibliothek von VS 2008 abhängt (msvcr90.dll). Das bedeutet, dass zur Laufzeit beide Versionen der C-Bibliotheken geladen werden, was in Ordnung ist, aber Ihren Speicherverbrauch erhöht und die Ladezeit um eine sehr geringe Menge verlangsamt.

3voto

Reed Copsey Punkte 536986

Wie die anderen Poster bereits angemerkt haben, sollten Sie auf diese Weise arbeiten können.

Es gibt jedoch ein großes Problem - Speicherverwaltung. Die C++-Laufzeiten können insbesondere knifflig sein.

Das größte Problem besteht darin, dass es einige Inkompatibilitäten zwischen der Speicherverwaltung der 2005- und 2008-Laufzeiten gibt. Alles funktioniert einwandfrei, vorausgesetzt, Sie weisen immer Ihren Speicher in Ihrer VS2008 DLL zu und löschen den im DLL zugewiesenen Speicher immer innerhalb Ihres DLL. Dies erfordert in der Regel das Erstellen von "zusätzlichen" Factory- und Cleanup-Methoden in Ihrem DLL und deren Exponierung.

Wenn Sie Speicher innerhalb Ihrer VS 2008 DLL allokieren und ihn dann aus Code, der mit VS 2005 kompiliert wurde, löschen oder umgekehrt, können Sie auf sehr schwer zu debuggende Probleme stoßen. Es funktioniert oft, aber es treten zufällige Abstürze oder Instabilitäten auf.

2voto

JaredPar Punkte 699699

Das größte Problem, auf das Sie stoßen werden, ist die Verwendung des CRT. Wenn der CRT (C RunTime) statisch in die DLL eingebunden ist, sollten Sie keine Probleme haben.

Wenn der CRT jedoch dynamisch in das Projekt eingebunden ist, können Sie auf Probleme stoßen. Visual Studio 2005 und 2008 verwenden unterschiedliche Versionen des CRT und sie können nicht einfach zusammen geladen werden. Aber wenn eine oder beide DLLs den CRT statisch verknüpfen, sollten Sie in ziemlich guter Verfassung sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X