Unterschied einer DLL und Stub

  • Themenstarter Themenstarter DayScanner
  • Beginndatum Beginndatum
D

DayScanner

Guest
Hallo alle zusammen,

ich bin neu hier im Forum und lerne momentan programmieren. Kürzlich bin auf das Thema Programmcode auslagern gekommen und bei Wikipedia über die Begriffe DLL und Stub gestolpert.

Wenn ich es richtig verstanden habe, lager ich Programmcode in einer DLL bspw. dann aus, wenn mehrere Anwendungen von mir die selben Funktionen benötigen - damit ich Funktionen nicht doppelt und dreifach in den Speicher laden muss. Bei einer Stub hingegen setze ich in meiner Anwendung quasi eine Art Platzhalter, weil der Code dafür noch nicht entwickelt ist bzw. später hinzugefügt werden soll.

DLL's habe ich schon mal gesehen, aber eine Stub kann ich mir in der Praxis irgendwie schlecht vorstellen - wo wird das genutzt und wie sieht soetwas konkret aus? Compiliere ich da erst mein Programm und das Programm versucht dann auf die Stub zuzugreifen? Ist die Stub auch compiliert? In was für Datei-Formaten wird denn so eine Stub geschrieben und wo ist da der Vorteil gegenüber der DLL ? In diversen IDE's sehe ich wenn überhaupt nur die Möglichkeit eine DLL zu erstellen.

Ich bedanke mich.

Viele Grüße
 
Also du interpretiert in einen Stub glaube ich mehr rein als er ist. Heißt ja auf Englisch Stumpf und kann in der Programmierung daher wohl als etwas Verweis ähnliches angesehen werden mit dem auf eine externe Komponente zugegriffen wird. Daher würde man auch einen Aufruf einer DLL, dessen Funktionen du richtig erfasst hast, im Programmcode als "Stub" bezeichnen, obwohl mir das nicht sehr geläufig ist.
Hoffe ich konnte dir helfen!
 
DLL's habe ich schon mal gesehen, aber eine Stub kann ich mir in der Praxis irgendwie schlecht vorstellen - wo wird das genutzt und wie sieht soetwas konkret aus?
Die "Definition" der Stub in der Wikipedia ist relativ "verwischt".
Oft versteht man man unter Stub eher einen Codeblock, der unabhängig vom restlichen Programm ist.
Beispiele:
verschiedene Exe-Packer (UPX, FSG, MEW => OpenSource bzw. Code zugänglich ;) ).
Hier ist die Stub ein Codeblock, der den Rest der Executable im Speicher entpackt, lauffähig macht (z.B Importe/Import Address Tabelle wiederherstellt) und optimalerweise von möglichst wenig äußeren Faktoren abhängig ist.
Vorteil gegenüber einer DLL: "all inclusive" - UPX gepackte Exen wird keine UPX-EntpackDLL beigelegt.
Geschrieben werden kann der Stubcode prinzipiell in jeder Sprache - bevorzugt allerdings solche, die "nativen" Code generieren können. Am einfachsten in Assembly, da viele Assembler "bin" bzw. "raw" Outputformat zulassen. C und Delphi sind auch relativ gut möglich. Bei Hochsprachen wird man aber den generierten Code nachbearbeiten müssen (also den wirklich benötigten Teil aus der Exe/DLL wieder extrahieren).
 
Klassischer Stub ist eine Funktion, die nichts tut bzw. nur einen Erfolgswert zurückgibt.

Beispiel:

Code:
bool AuthentifiziereBenutzer() {
return true;
}

int main() {
if(AuthentifiziereBenutzer()) {
FeuereNukleareFriedensraketenAb();
}
}

AuthentifiziereBenutzer() ist ein Stub, weil es noch nicht die Funktion erfüllt, die es erfüllen sollte. Um aber den Rest des Programms unabhängig weiter entwickeln zu können, wird die Funktion dennoch als eine Art Dummy implementiert (Ja-Sager).
 
Häufige verwendet man die Stubs, die enkore beschrieben habe, wenn man Unit-Tests schreibt. Damit kann man nämlich das Verhalten anderer Module komplett ausklammern und tatsächlich nur eines testen. Im Unterschied dazu gäbe es noch Mock-Objekte, kommen ebenfalls aus dem Gebiet der Unit-Tests, was im Grunde auch nur Stubs sind, auf die man dann aber den Test-Assert los lässt.

mfg benediktibk

PS: So viel Senf muss noch dazu
 
Zurück
Oben