Sign in Join
Wiki copytemporary

Revision 1 of 2, by Trev on 2-13-2020. The page as it is now.

DLL dynamically load/de

Zurück zu den Zusätzlichen Informationen.

Dieser Artikel beschäftigt sich mit der Windowsprogrammierung.

Das Tutorial, zeigt wie eine DLL (Dynamic Link Library) <b>dynamisch</b> geladen wird.

Die Dll (DLLTest.dll) auf die sich im unteren Beispiel bezogen wird:

pascal
library Info;

{$mode objfpc}{$H+}

uses
  SysUtils;

{$R *.res}

// Das Unterprogramm der DLL
  function funStringZurueck(strUebergabe: string): PChar;
  begin
    funStringZurueck := PChar(UpperCase(strUebergabe));
  end;

// Exportiertes Unterprgramm(e)
exports
  funStringZurueck;

begin
end.

Was ist zu tun:

Einbinden, verwenden und freigeben des DLL-Unterprogramms im eigenen Programm:

pascal
uses
  Windows, ...;

  ...

function funDllEinbinden: string;
type
  //Definition des aufzurufenden Unterprogramms, wie es in der einzubindenden DLL definiert ist
  TfunStringZurueck = function(strUebergabe: string): PChar; stdcall;

var
  // Legt eine passende Variable (Datenfeld) für das DLL-Unterprogramm an
  funStringZurueck: TfunStringZurueck;
  // Legt einen Handle für den Handle der DLL an
  LibHandle: THandle;

begin

  // Ermittelt den Handle der zuverwendenden Library
  LibHandle := LoadLibrary(PChar('DLLTest.dll'));

  // Prüft, ob das Laden der DLL erfolgreich war
  if LibHandle <> 0 then
  begin
    // Weisst der Variablen funStringZurueck die Adresse des Unterprogrammaufrufs zu
    // 'funStringZurueck' aus der DLL DLLTest.dll zu.
    Pointer(funStringZurueck) := GetProcAddress(LibHandle, 'funStringZurueck');

    // Prüft, ob eine gültige Adresse zurück gegeben wurde
    if @funStringZurueck <> nil then
      Result := funStringZurueck('hallo welt');
  end;

  // Freigabe des Arbeitsspeichers
  funStringZurueck := nil;
  FreeLibrary(LibHandle);

end;

  ...

From the Free Pascal wiki, page "DLL dynamically load/de", as it stood on 2020-02-13 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.