Beiträge durchsuchen

DLLs

Strings als Parameter oder Rückgabewert

Zur Erinnerung, so sah er aus:

{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss sich
  in der ersten Unit der unit-Klausel der Bibliothek und des Projekts
  befinden (Projekt-Quelltext anzeigen), falls die DLL Prozeduren oder
  Funktionen exportiert, die Strings als Parameter oder
  Funktionsergebnisse weitergibt. Dies trifft auf alle Strings zu, die
  von oder zur DLL weitergegeben werden -- auch diejenigen, die sich
  in Records oder Klassen befinden. ShareMem ist die Schnittstellen-
  Unit zu BORLNDMM.DLL, der gemeinsamen Speicherverwaltung, die
  zusammen mit der DLL weitergegeben werden muss. Um die Verwendung
  von BORLNDMM.DLL zu vermeiden, sollten String-Informationen als
  PChar oder ShortString übergeben werden. }

Im Großen und Ganzen eigentlich selbsterklärend: Es ist zu empfehlen, keine Stringwerte zwischen Anwendung und DLL zu übergeben. Denn um das machen zu können, muss die Unit ShareMem eingebunden und die BORLNDMM.DLL mit der Anwendung weitergegeben werden. So etwas ist immer problematisch, da sich die DLL von Delphi-Version zu Delphi-Version ändern kann (früher hieß sie meines Wissens DELPHIMM.DLL). Es ist also um Einiges einfacher, nur ShortStrings bzw. PChars zu übergeben.
Wird die BORLNDMM.DLL verwendt, so muss die Unit ShareMem sowohl in der DLL als auch in der einbindendn Unit des aufrufenden Programms an erster Stelle der uses-Klausel genannt werden.
Sollen AnsiStrings oder dynamische Arrays benutzt werden, dann ist die DLL nur mit Delphi nutzbar. Da die Speicherverwaltungs-DLL sich bei verschiedenen Delphi-Versionen unterscheidet, kann eine solche DLL auch nur mit einer Anwendung zusammen verwendet werden, die mit der gleichen Compilerversion compiliert wurde. Auf stdcall kann dann übrigens verzichtet werden.
Nach diesem Tutorial sollte es nun für Sie kein Problem sein, eigene DLLs zu erstellen und diese in eigenen Anwendungen zu verwenden.

1 Kommentar zu DLLs

  1. Hi,

    danke für das nette Tutorial.

    Aber windows alleine reicht bei mir im uses Abschnitt nicht aus. Ich muss noch SysUtils hinzufügen damit es läuft. Ohne SysUtils kommt diese Fehlermeldung: [DCC Fehler] Unit3.pas(17): E2003 Undefinierter Bezeichner: ‚ExtractFilePath‘

Kommentare sind geschlossen.