Auf DLLs zugreifen



  • Hallo!

    Habe 2 Fragen zu DLLs:

    1. In C(++) erhält man den Zugriff auf DLL ja durch Headerdateien. DLLs werden dann ja (wie der Name schon sagt) dynamisch eingebunden.
      Wieso muss man trotzdem für den Linker noch statische Library-Dateien eintragen? Sollten nicht alle notwendigen Informationen für den DLL-Zugriff schon in der Headerdatei stehen?

    2. Wie schon oben beschrieben wird in C(++) über Headerdateien auf DLLs zugegriffen. In VB wird aber die DLL selbst angegeben (mit der Declare Function-Anweisung).
      Gibt es da (abgesehen von der Syntax) irgendwelche technischen Unterschiede, die mich als Programmierer interessieren sollten?

    Danke!

    mfg



  • Frage 1.
    Wenn du die dll´s implizit lädst, das ist das Verfahren welches du beschreibst, muß der Linker zum Zeitpunkt die Referenzen auf die Funktionen die aufgerufen werden auflösen. Dazu dienen die Lib´s die bei der dll erstellung erzeugt werden. Diese enthalten sogenannte Stubfunktionen, d.h. Leere Funktioen mit dem gleichen Aufruf wie die Funktionen aus der Dll. Diese Platzhalter werden in das Programm gelinkt und beim Start des Programms durch die Funktionen aus der dll ersetzt.
    ! Achtung, diese libs enthalten nur die Funktionsrümpfe, im Gegesatz zu statischen Libraries die den realen Code enthalten aber leider auch die Endung lib haben. !

    Wenn du von VB aus auf dll Libraries zugreifen willst, sollten alle deine Funktionen in der dll ein C-Interface haben. Dies sind die einzig unter Windows genormten dll Interfaces. Die einzelenen Compiler Borland und Microsoft z.B setzen die Funktionen/ Klassen in C++ leicht unterschiedlich im Interface um so das es beim austausch zum Klemmen kommt.

    Auch das Interface zwischen Visual C und VB ist nicht eindeutig, z.B Byte-Alingment, name Mangling. Dazu gab es hier schon ein oder zwei threads (ich hab sie leider nicht parat) such bitte mal danach.

    P.S. Ein erster Einstieg http://www.c-plusplus.net/forum/viewtopic.php?t=48220&highlight=vb


Anmelden zum Antworten