Wie aktualisiert man eine C ++ - DLL, ohne die EXE mit der lib-Datei neu verknüpfen zu müssen?

8

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?

    
Rich 30.07.2009, 17:12
quelle

4 Antworten

8

Wenn Sie die Funktionen aus der Verwendung einer DEF-Datei exportieren und die Ordnungszahlen manuell angeben, sollten Sie dies erreichen können.

Referenz

Ссылка

    
Michael A. McCloskey 30.07.2009, 17:18
quelle
8

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):

  • Entfernen von Feldern (auch private) aus Klassen
  • Hinzufügen neuer Felder (sogar privat) zu Klassen
  • Hinzufügen neuer Basisklassen zu vorhandenen Klassen
  • Entfernen von Basisklassen aus vorhandenen Klassen
  • Hinzufügen einer neuen virtuellen Methode vor einer bestehenden virtuellen Methode (das Hinzufügen neuer virtueller Methoden nach vorhandenen ist in Ordnung, mit Ausnahme des im nächsten Punkt beschriebenen Falls)
  • Hinzufügen einer neuen virtuellen Methode in einer Klasse, die als Basisklasse von einer anderen Klasse in derselben DLL verwendet wird, die auch über virtuelle Methoden
  • verfügt
  • Ändern der Art der vorhandenen Felder
  • Ändern der Signatur bestehender Methoden
  • Eine virtuelle Methode nicht virtuell machen und umgekehrt
Pavel Minaev 30.07.2009 17:34
quelle
0

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.

    
Nick Bastin 30.07.2009 17:17
quelle
0

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.

    
Michael Burr 30.07.2009 17:26
quelle

Tags und Links