AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

HowTo: Runtime-Packages

Ein Thema von RSE · begonnen am 23. Nov 2012 · letzter Beitrag vom 11. Dez 2014
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz