Zunächst verweise ich auf eine Windows-Umgebung und VC ++ - Compiler.
Ich möchte eine Vc ++ - DLL erstellen und die Kompatibilität mit einer Exe beibehalten, die bereits mit der lib verknüpft wurde, ohne die Exe neu erstellen oder die DLL dynamisch mit LoadLibrary laden zu müssen. Mit anderen Worten, gibt es eine Möglichkeit, einer dll Klassen und Methoden hinzuzufügen (aber keine zu entfernen) und sicherzustellen, dass die bestehenden Einstiegspunkte gleich bleiben?
Wenn Sie die Funktionen aus der Verwendung einer DEF-Datei exportieren und die Ordnungszahlen manuell angeben, sollten Sie dies erreichen können.
Referenz
Es hängt davon ab, wie Ihre EXE die Klassen aus der DLL verwendet hat. Das Hinzufügen neuer Klassen sollte keine Auswirkungen auf bestehende Einstiegspunkte haben. Abgesehen davon beeinflussen jedoch die folgenden Faktoren die Objektgröße und / oder das Layout und sind daher eine klientbrechende Änderung (beachten Sie, dass dies technisch VC-spezifisch ist, die meisten davon jedoch für jede sinnvolle Implementierung gelten):
Solange Sie keine exportierten Symbole hinzufügen, ändern sich die Ordinalzahlen nicht. Wenn Sie exportierte Symbole über den Standarddllexport-Mechanismus hinzufügen, wird das schwierig zu steuern sein. Wenn Sie die alte .xpf-Symboldatei verwenden, können Sie vielleicht die Reihenfolge der Symbole in der lib kontrollieren (obwohl ich das nicht sicher weiß - es könnte sie immer noch neu anordnen, wie es will), aber es ist schwierig zu tun C ++ Symbole auf diese Weise.
Ich denke, dass Ordnungszahlen selten zum Auflösen von DLL-Importen verwendet werden. Ich denke, dass Sie .def-Dateien verwenden müssen, um den Linker dazu zu bringen, sie zu verwenden. Solange Sie die Namen oder Signaturen der exportierten Funktionen nicht ändern, sollte die .exe funktionieren.
Tags und Links dll visual-c++