Frage

Ist es möglich, eine C ++ statische Bibliothek zu verwenden (LIB) kompiliert mit Visual Studio 6 in Visual Studio 2008?

War es hilfreich?

Lösung

Ich soll nicht denken, warum nicht - solange man die üblichen CRT-Speichergrenzen zu halten (dh, wenn Sie Speicher in einer Library-Funktion zuweisen, immer frei, um es aus dem Innern der Bibliothek - durch eine Funktion in dem lib Aufruf die zu tun befreiend).

Dieser Ansatz funktioniert gut für dlls mit allen Arten von Compilern, statisch gelinkte Bibliotheken sollten auch in Ordnung sein.

Andere Tipps

Es hängt wirklich davon. Aussetzt das lib nur ‚extern‚C‘‘ Funktionen, bei denen Speicher entweder durch gerade Win32-Methoden (CoTaskMemAlloc, etc.) verwaltet oder der Anrufer nie freigibt das durch den Angerufenen oder umgekehrt Speicher zugewiesen? Verlassen Sie sich nur auf Basisbibliotheken, die nicht viel geändert haben, seit VS 6? Wenn ja, sollten Sie sich gut.

Es gibt zwei grundlegende Dinge zu beachten gilt. Änderungen an globalen Variablen von 3rd-Party-Bibliotheken verwendet, und Änderungen an die Struktur von Strukturen, Klassen, usw. definiert durch diese 3rd-Party-Bibliotheken. Zum Beispiel hat das CRT Speicherzuordner geändert wahrscheinlich seine verborgenen Zuordnung Managementstrukturen zwischen den zwei Versionen, so mit einer Version der Bibliothek zurechnen einer weiterer freien ein Stück Erinnerung ist und es wird wahrscheinlich zu einem Absturz führen.

Als ein anderes Beispiel, wenn Sie C ++ Klassen über die Schnittstelle aussetzen und sie verlassen sich auf MS Runtime-Bibliotheken wie MFC, gibt es eine Chance, dass die Klasse Layout zwischen VS 6 und VS 2008 geändert hat Das bedeutet, dass ein Mitglied / Feld Zugriff auf die Klasse könnte auf die falsche Sache gehen und zu unvorhersehbaren Ergebnissen führen. Du bist wahrscheinlich, wenn die LIB verwendet MFC in irgendeiner Eigenschaft abgespritzt. MFC definiert und intern verwendet Tonnen Globals und jeder Zugriff auf MFC Globals durch die Operationen in der LIB kann Fehler verursachen, wenn die MFC-Infrastruktur in der Hosting-Umgebung geändert hat (es hat sich seit VS 6, BTW geändert).

Ich habe nicht genau erforscht, welche Änderungen in den MFC-Header gemacht wurden, aber ich habe eine unvorhersehbares Verhalten zwischen MFC / ATL-basierten Klasse Binärdateien in verschiedenen VS-Versionen.

zusammengestellt gesehen

Auf dieser Fragen gibt es ein Risiko für Funktionen wie strtok (), die in den Laufzeitbibliotheken definiert auf statische globale Variablen verlassen. Ich bin nicht sicher, aber ich bin besorgt darüber, diese statischen Variablen richtig bekommen können nicht initialisiert, wenn Sie den Single-Threaded CRT erwarten auf einem auf dem Multi-Threaded CRT erstellt Thread eine Client verwenden. Sehen Sie in der Dokumentation für _beginthread () für weitere Informationen.

Ja. Es sollte überhaupt keine Probleme mit diesem sein. Wie gbjbaanb erwähnt, müssen Sie Ihr Gedächtnis kümmern, aber VS2008 wird es immer noch funktionieren. Solange Sie nicht CLR versuchen, zu mischen (verwaltet) Code mit ihm. Ich würde dagegen empfehlen, wenn überhaupt möglich. Aber, wenn Sie rohen C sprechen oder C ++ Code, sicher, es wird funktionieren.

Was genau planen Sie über die Verwendung? (Was ist in dieser Bibliothek?) Haben Sie es schon versucht, aber Probleme haben, oder die Überprüfung Sie, kurz bevor Sie eine Menge Zeit damit verschwenden, etwas zu bekommen, zu arbeiten, dass nur gewohnt?

Sicher, es wird funktionieren.

Sind Sie fragen, wo in VS2008 die Verweise auf Code?

Wenn ja, geht Requisiten Proj -> Linker -> Input auf Konfigurationseigenschaften auf den Eigenschaftenseite. Geben Sie für „zusätzliche Abhängigkeiten“ und codieren die LIB dort.

Gehen Sie Requisiten Proj -> Linker -.> Allgemein und Code, um den Libs Pfad in "Zusätzliche Bibliotheksverzeichnisse"

Das sollte es tun !!

Es gibt Fälle, waren die Antwort nein ist, wenn wir von VS6 zu VS2k5 zogen wir alle unsere Bibliotheken wieder aufbauen mussten, da das Speichermodell geändert hatte und die CRT-Funktionen, bei denen anders.

Es gab eine Handvoll von Änderungen zwischen VC6, VS2003, VS2005 und VS2008 zu brechen. Visual C ++ (in VS2005) gestoppt Unterstützung für single-threaded, statisch CRT-Bibliothek verknüpft. Einige Bruch Änderungen aufgezählt hier und hier . Diese Änderungen werden Ihre Verwendung von VC6 gebaut Libs in späteren Versionen auswirken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top