Wenn ein
Package oder eine
dll dynamisch zur Laufzeit geladen wurde, dann muss die Einsprungadresse für die Prozedur oder Funktion natürlich erst ermittelt werden. Das geht mit der Funktion GetProcAddress wie im Beispiel. Ob es noch weitere Möglichkeiten gibt, kann ich jetzt aus dem Kopf nicht sagen, aber eine reicht doch. Baue dir eine Initialisierungsfunktion, die dir alle Einsprungadressen ermittelt.
Wurde das
Package statisch geladen, dann brauchst du diesen Weg natürlich nicht beschreiten.
Hier eine Version mit einer Funktion mit Parametern (ungetestet):
Delphi-Quellcode:
type
TTestFunc:
function(i: Integer): Integer;
// muss mit dem Typ im Package übereinstimmen
var
HPack: HModule;
TestFunc: TTestFunc;
begin
try
HPack := LoadPackage('
MyPackage.bpl');
if HPack > 0
then
try
@TestFunc := GetProcAddress(HPack, '
TestFunc');
if Assigned(TestFunc)
then // Falls der Compiler hier meckert: @TestFunc verwenden - Die Compiler Magic bekommt auch nicht immer alles richtig hin...
Showmessage(IntToStr(TestFunc(5)));
else
ShowMessage('
Einsprungadresse für Funktion TestFunc nicht gefunden');
finally
UnloadPackage(HPack);
end
else
ShowMessage('
Das Laden des Packages "MyPackage.bpl" war nicht erfolgreich');
except
on E: EPackageError
do
ShowMessage('
Fehler beim Laden des Packages "MyPackage.bpl":' +
sLineBreak + E.
Message);
end;
end;
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."