R
hat eine LIB nicht die selben einschraenkungen wie eine DLL ?
beim linker werden die "Symbole" beim linkvorgang direkt verknüpft, quasi gleich verdrahtet.
Bei der Dll werden die Exportierten Funktionen und Paramter zur laufzeit verknüpft.
Der praktische unterschied ist meist, das linkerSymbole viel mehr Informationen übertragen als die Einträge in der Import-Tabelle.
ALso setzt du nen wichtiges flag anders, heissen die Symbole anderes, werden nicht verlinkt -> linkererror.
Bei ner dll geht das vielleicht durch. Und dann zur runtime, bevorzugt beim kunden, tolles verhalten, exceptions, etc.
Bei ABI definierten (C) Interfaces ist das dann aber egal, weils da keine Unterschiede geben darf, da ist genau festgelegt, was wo steht wie aufgelöst wird. wer stack aufräumt ... bzw kann man das direkt beeinflussen (Padding z.b.).
diese ABI kennt dann aber keine C++ Elemente, wie exceptions, templates, klassen ...
In der Praxis kann man aber nicht alles in C Interfaces giessen, und ne C++ ABI läßt leider auf sich warten.
deswegen gibts faulte kompromisse .... z.b. kannst du technisch alles in dlls packen wenn du garantieren kannst, das exe und dll IMMER mit gleichen Einstellungen compiliert wird. Kann man oft halt nicht.
Dlls machen wirklich technich Sinn, wenn:
- wirklich dynamisch geladen wird (also wirklich nur bei bedarf, also mit loadlibrary und co)
- wenn man Compiler einstellungen entkoppeln will (Einstellungen von 3d party libs/treiber vorgeschrieben kriegt, die man in der App nicht haben will)
- oder wenn die Dll wirklich eine seperat gewartete Komponente ist (fokus liegt auf Wiederverwendbarkeit/Stabilität)
Bei allen anderen Fällen bringen Dlls eher technisch mehr Probleme als Vorteile.
Auf der Anderen Seite wird bei ner Dll Schnittstelle durch die technsichen Anforderungen und das expliziete Exportieren oft auch das Schnittstellendesign sauberer und durchdachter, was ne positive Auswirkung auf die Architektur hat (Komponentendesign)
Ciao ...