DLL dynamically load/de
From Free Pascal wiki
Jump to navigationJump to search
Dieser Artikel behandelt ausschließlich Windows.
Siehe auch: Multiplatform Programming Guide/de
│
Deutsch (de) │
English (en) │
русский (ru) │
中文(中国大陆) (zh_CN) │
Dieser Artikel beschäftigt sich mit der Windowsprogrammierung.
Das Tutorial, zeigt wie eine DLL (Dynamic Link Library) dynamisch geladen wird.
Die Dll (DLLTest.dll) auf die sich im unteren Beispiel bezogen wird:
library Info;
{$mode objfpc}{$H+}
uses
SysUtils;
{$R *.res}
// Die Funktion der DLL
function funStringZurueck(strUebergabe: string): PChar;
begin
funStringZurueck := PChar(UpperCase(strUebergabe));
end;
// Exportierte Funktion(en)
exports
funStringZurueck;
begin
end.
Einbinden, verwenden und freigeben der DLL-Funktion im eigenen Programm:
uses
Windows, ...;
...
function funDllEinbinden: string;
type
//Definition der aufzurufenden Funktion wie Sie in der einzubindenden DLL definiert ist
TfunStringZurueck = function(strUebergabe: string): PChar; stdcall;
var
// Legt einen passenden Datentyp für die DLL-Funktion an
funStringZurueck: TfunStringZurueck;
// Legt einen Handle für die Speicheradresse der DLL-Funktion 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 Funktionsaufrufs
// '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 Arbeistspeichers
funStringZurueck := nil;
FreeLibrary(LibHandle);
end;
...
--Olaf 13:48, 4 June 2013 (UTC)