Thema: Delphi DLLs einbinden

Einzelnen Beitrag anzeigen

CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 

DLLs einbinden

  Alt 10. Feb 2005, 19:23
Ich habe bisher keinen Beitrag gefunden, der kurz Quelltexte zeigt, wie man eine DLL einbinden kann. Ich gehe hier nicht auf das Programmieren von DLLs ein oder was der Vortei der beiden genannten Methoden, sondern nur, wie das funktioniert.

0. Beispiel-Funktion
Für die beiden folgenden Punkte gehen wir davon, aus dass eine DLL namens dptest.dll im gleichen Verzeichnis, wie die Anwendung liegt und folgende Funktion exportiert:
function Addieren(a, b: integer): integer; 1. Direktes Einbinden
Für das direkte Einbinden einer Funktion muss im interface-Abschnitt folgendes eingefügt werden:
Delphi-Quellcode:
const
  DLLNAME = 'dptest'; // Unter Win9x funktioniert das, unter NT/XP/etc. MUSS AUF JEDENFALL die Endung mit angegeben werden!

{...}

function Addieren(a, b: integer): integer; external DLLNAME; stdcall;
1. Dynamisches Einbinden zur Laufzeit
Empfohlen, wenn sich zum Beispiel der Dateiname der DLL ändern kann oder man sicher gehen will, dass die DLL wirklich vorhanden ist (nicht dass ein User die "versehentlich" gelöscht hat).
Delphi-Quellcode:
type
  TAddierenProc = function(a, b: integer): integer; stdcall;

var
  hDLL: THandle; // Handle zur DLL
  iRes: integer; // Ergebnis der Funktion
  FarProc: TAddierenProc;
  sDLLPath: string;

begin
  sDLLPath := ExtractFilePath(Application.ExeName) + 'dptest.dll';
  hDLL := LoadLibrary(sDLLPath);
  if hDLL = 0 then begin
    ShowMessage('DLL konnte nicht geladen werden.');
    Exit;
  end;

  try
    FarProc := GetProcAddress(hDLL, 'Addieren');
    if Assigned(FarProc) then
      iRes := FarProc(1, 2);
  except
    ShowMessage('Funktion der DLL konnte nicht ausgeführt werden.');
  end;
end;
Beide Methoden haben ihre Vor- und Nachteile.

Chris
  Mit Zitat antworten Zitat