erwendung von C ++ - DLLs mit unterschiedlichen Compilerversion

Diese Frage bezieht sich auf "Wie erstelle ich konsistente DLL-Binärdateien für alle VS-Versionen?"

Wir haben Anwendungen und DLLs, die mit VC6 erstellt wurden, und eine neue Anwendung, die mit VC9 erstellt wurde. Die VC9-App muss mit VC6 kompilierte DLLs verwenden, von denen die meisten in C und eine in C ++ geschrieben sind. Die C ++ - Bibliothek ist aufgrund von Problemen mit der Namensdekoration / -verknüpfung problematisch.Das Kompilieren mit VC9 ist derzeit keine Option, da es anscheinend einige Nebenwirkungen gibt. Das Auflösen dieser Probleme wäre ziemlich zeitaufwändig.Ich kann die C ++ - Bibliothek ändern, sie muss jedoch mit VC6 kompiliert werden. Die C ++ - Bibliothek ist im Wesentlichen ein OO-Wrapper für eine andere C-Bibliothek. Die VC9-App verwendet sowohl statische als auch nicht statische Funktionen.

Während die statischen Funktionen mit so etwas wie @ behandelt werden könn

// Header file
class DLL_API Foo
{
    int init();
}

extern "C"
{
    int DLL_API Foo_init();
}

// Implementation file
int Foo_init()
{
    return Foo::init();
}

Mit den nicht statischen Methoden ist das nicht so einfach.

So wie ich es verstehe,Chris Becke'ser @ -Vorschlag, eine COM-ähnliche Schnittstelle zu verwenden, hilft mir nicht weiter, da die Namen der Schnittstellenmitglieder immer noch verziert sind und daher von einer mit einem anderen Compiler erstellten Binärdatei aus nicht zugänglich sind. Bin ich gleich da?

Wäre die einzige Lösung, eine DLL-Schnittstelle im C-Stil mit Handlern für die Objekte zu schreiben, oder fehle ich etwas? In diesem Fall hätte ich wahrscheinlich weniger Mühe, die eingebundene C-Bibliothek direkt zu verwenden.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage