Thema: Delphi HowTo: Runtime-Packages

Einzelnen Beitrag anzeigen

RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#4

AW: HowTo: Runtime-Packages

  Alt 11. Dez 2014, 17:26
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."
  Mit Zitat antworten Zitat