Neuübersetzung bei DLL Änderung



  • Hallo,

    gibt es eine "feste" Regel, nachdem bei Änderung einer DLL (MFC Erweiterungs DLL) davon abhängige weitere DLLs oder Exe-Files neu übersetzt werden müssen?

    Genügt es die exportierten Header im Auge zu behalten oder was passiert wenn ganze Dialogklassen oder Ressourcen in die DLL neu reinkommen?
    Wann ändern sich die Einsprungpunkte? In der KB habe ich keinen passenden Artikel darüber gefunden.



  • DllFrage schrieb:

    Wann ändern sich die Einsprungpunkte?

    Nur wenn die Signatur der Funktionen sich ändert kriegst du Probleme. Genau das ist ja ein wichtiger Punkt der DLLs, man kann verschiedene Versionen der DLL mit einer sich nicht ändernden Exe verwenden solange sich die API nicht ändert.

    Allerdings kann es z.B. durch Namemangeling zu Problemen kommen wenn du kein reines C Interface hast. Solange du allerdings immer den gleichen Compiler verwendest gibt auch das keine Probleme. Wobei ein reines C Interface meiner Meinung nach weniger problematisch scheint.
    Ansonsten fällt mir gerade kein weiterer Sonderfall ein.



  • DarkShadow44 schrieb:

    DllFrage schrieb:

    Wann ändern sich die Einsprungpunkte?

    Nur wenn die Signatur der Funktionen sich ändert kriegst du Probleme.

    Aber doch auch wenn neue exportierte Funktionen/Klassen dazukommen?

    Grüße



  • Solange die alten sich nicht ändern und die API auch ohne die neuen Funktionen nutzbar ist - kein Problem 😉



  • Der Visual Studio Compiler sortiert virtuelle Funktionen wenn ich mich recht erinnere nach Namen, d.h. wenn eine dazukommt, kann das durchaus ein Problem sein.



  • MSVC nimmt virtuelle Funktionen in der Reihenfolge wie sie im Header-File stehen.
    D.h. so lange man neue virtuelle Funktionen hinten dran schreibt funktioniert es.

    Das ist auch mehr oder weniger garantiert, denn es ist nötig damit man COM Interfaces mit MSVC in C++ implementieren kann.



  • Irgend so ein Problem mit der Binärkompatibilität hatten wir schon mal, wo wir das nicht erwartet hätten, aber ich kann mich jetzt nicht mehr erinnern, was das war...



  • Auf der sicheren Seite bin ich also, sobald am exportierten Header was geändert wurde -> neu übersetzen

    Gibt es ein Tool mit dem ich 2 Versionen von Dlls und deren Einsprungpunkte miteinander vergleichen könnte?

    Danke für die Antworten 👍



  • DUMPBIN /EXPORTS <filename>
    

    (wobei <filename> jeweils deine beiden DLLs sind)
    Und danach dann ein diff-Tool o.ä. auf die beiden Ausgaben ansetzen.



  • @DllFrage
    Nur zur Sicherheit: dir ist klar dass zwei DLLs die exakt die selben Einsprungspunkte haben (mit exakt identischen Namen etc.) deswegen noch lange nicht kompatibel sind? Weil die Einsprungspunkte ja nichts über das Layout (Grösse, wo sind welche Member) der einzelnen Klassen aussagen.



  • @Th69
    👍 Danke, kannte ich bisher nicht.

    @hustbaer
    Klaro, was inhaltlich auseinandergeht hat damit nichts zu tun 😉


Log in to reply