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)
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
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.
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.