Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Windows API / MS.NET Framework API (https://www.delphipraxis.net/20-library-windows-api-ms-net-framework-api/)
-   -   Delphi DLLs einbinden (https://www.delphipraxis.net/40082-dlls-einbinden.html)

CalganX 10. Feb 2005 20:23


DLLs einbinden
 
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:
Delphi-Quellcode:
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:13 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