Adresse von DLL-Funktionen WinNT

Von: , Frage gestellt am Do, 14. Okt 1999

Hallo,

eine prinzipielle Frage:

- Ich Lade eine DLL mit LoadLibrary,
- die Funktionsadressen bekomme ich mit GetProcessAddress

nun die Frage:
Bleiben die Funktionsadressen immer gleich, solange die DLL benutzt wird, oder koennen sie sich verschieben, so dass ich fuer jeden neuen Funktionsaufruf sicherheitshalber die Adresse nochmal mit GetProcessAddress holen sollte. (Was z.B. in VB nicht moeglich ist)

Niels

4 Antworten zu dieser Frage

  1. Antwort von nach 4 Stunden hilfreich
    Re: Adresse von DLL-Funktionen WinNT

    bleiben gleich, solange bis FreeLibrary aufgerufen wird.
    Unter NT nicht vergessen. '.DLL' immer anzugeben.

    • Antwort von nach 4 Stunden hilfreich
      Re^2: Adresse von DLL-Funktionen WinNT

      Vielen Dank für die Info.

      Das Bestätigt meine Vermutung. Mein Problem liegt darin, dass ich eine DLL in Delphi statisch (DLL wird beim Programmstart automatisch geladen) oder dynamisch (DLL mit LoadLibrary und GetProcessAddress laden und spaeter wieder entladen) laden kann.

      Nun Funktioniert das bei mir dynamisch ganz gut, statisch aber nicht!

      Leider stammt der Quelltext (des Delphiprogramms) nicht von mir. Auch die DLL liegt nicht als Source vor. Ich mach da jetzt schon drei Tage herum. Wahrscheinlich übersehe ich im Code irgendwas Fieses :-(

      Niels


      • Antwort von nach 6 Stunden hilfreich
        Re^3: Adresse von DLL-Funktionen WinNT

        Leider stammt der Quelltext (des
        Delphiprogramms) nicht von mir. Auch die
        DLL liegt nicht als Source vor. Ich mach
        da jetzt schon drei Tage herum.
        Wahrscheinlich übersehe ich im Code
        irgendwas Fieses :-(

        Statisches Einbinden von DLL-Routinen ist ja eigentlich der einfachere Weg. Solange die Procs korrekt deklariert werden udn man auf die gemeinsame Aufrufkonvention achtet:

        function AddValues(a, b: Integer) : Integer; stdcall; external 'syslib.dll';

        oder unter anderem "lokalen" Namen:

        function Addieren(a, b: Integer) : Integer;
        stdcall; external 'syslib.dll', name 'AddValues';

        Den meisten Programme/DLLs liegen die C-Konventionen, stdcall zu Grunde.

      • Antwort von nach einem Tag hilfreich
        Re^3: Adresse von DLL-Funktionen WinNT

        Noch ein Tip: Auch beim statischen Einbinden einer DLL ist Gross/Kleinschreibung wichtig.

        Wenn Du nicht genau weisst, wie man einen Funktionsnamen schreibt, dann kannst Du mit dem Tool "tdump.exe" (ist ein Kommandozeilenprogramm und bei Delphi dabei) herausfinden welche Routinen eine DLL exportiert, wie man die schreibt und auch den Index herausfinden.

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!