Einzelnen Beitrag anzeigen

wschrabi

Registriert seit: 16. Jan 2005
448 Beiträge
 
#3

AW: Wie lade ich eine DLL zur Laufzeit.

  Alt 21. Sep 2024, 11:11
Habs:
Um von einer DLL zwei Integer-Variablen an das aufrufende Hauptprogramm zu übergeben, können Sie eine Funktion in der DLL definieren, die diese Variablen als `var`-Parameter zurückgibt. Hier ist ein vollständiges Beispiel, das zeigt, wie Sie dies in Delphi umsetzen können.

### Schritt 1: Erstellen der DLL

Definieren Sie eine Funktion in der DLL, die zwei Integer-Variablen über `var`-Parameter zurückgibt.

Delphi-Quellcode:
library ExampleDLL;

uses
  SysUtils, Classes;

procedure GetCoordinates(var X, Y: Integer); stdcall;
begin
  // Beispielwerte für X und Y
  X := 100;
  Y := 200;
end;

exports
  GetCoordinates;

begin
end.


### Schritt 2: Verwenden der DLL im Hauptprogramm

Laden Sie die DLL im Hauptprogramm und rufen Sie die Funktion auf, um die Werte zu erhalten.

Delphi-Quellcode:
uses
  Windows, SysUtils;

type
  TGetCoordinates = procedure(var X, Y: Integer); stdcall;

var
  DLLHandle: THandle;
  GetCoordinates: TGetCoordinates;
  X, Y: Integer;
begin
  // Laden der DLL
  DLLHandle := LoadLibrary('ExampleDLL.dll');
  if DLLHandle = 0 then
    raise Exception.Create('Could not load the DLL: ' + SysErrorMessage(GetLastError));

  try
    // Adresse der Funktion abrufen
    @GetCoordinates := GetProcAddress(DLLHandle, 'GetCoordinates');
    if not Assigned(GetCoordinates) then
      raise Exception.Create('Could not find the function in the DLL');

    // Funktion aufrufen und die Werte erhalten
    GetCoordinates(X, Y);

    // Ausgabe der erhaltenen Werte
    WriteLn(Format('Received coordinates: X = %d, Y = %d', [X, Y]));
    
  finally
    // Freigeben der DLL
    if DLLHandle <> 0 then
      FreeLibrary(DLLHandle);
  end;
end.

### Wichtige Hinweise:
- **Calling Convention**: Stellen Sie sicher, dass sowohl in der DLL als auch im Hauptprogramm die gleiche Calling Convention (`stdcall`) verwendet wird.
- **Fehlerbehandlung**: Überprüfen Sie immer den Rückgabewert von `LoadLibrary` und `GetProcAddress`, um sicherzustellen, dass die Operationen erfolgreich waren.
- **Ressourcenmanagement**: Denken Sie daran, die DLL mit `FreeLibrary` freizugeben, wenn sie nicht mehr benötigt wird.

Dieses Beispiel zeigt eine einfache Möglichkeit, wie Daten von einer DLL an ein Hauptprogramm übergeben werden können. Die Verwendung von `var`-Parametern ermöglicht es Ihnen, Werte direkt zu ändern und an den Aufrufer zurückzugeben.
  Mit Zitat antworten Zitat