dll's enthalten meistens einfach funktionen, die nicht nur für ein programm, sondern eventuell für mehrere brauchbar sind. damit spart man sich dann später arbeit, indem man einfach die schon bestehenden funktionen aus einer dll importiert. ausserdem kann man updates so gestalten, dass nur bestimmte dll's ersetzt werden. und dann wird natürlich auch die eigentliche programmdatei viel kleiner. wenn der gesamte code in eine dll ausgelagert wird, ist das executable gerade mal 9kb gross.
aber genug gelabert.
dll's kann man auf zwei wege in ein programm einbinden: statisch oder dynamisch. eine statische einbindung bedeutet dabei, dass das dll-file beim programmstart unbedingt vorhanden sein muss. dynamisch bedeutet, dass die dll erst in den speicher geladen wird, wenn das programm sie benötigt. meiner meinung nach ist die dynamische methode besser.
dabei arbeitest du nicht mit der dll direkt, sondern nur mit einem handle der dll. also musst du jedes mal erst die dll in den speicher laden, bevor du die funktionen daraus benutzen kannst:
Code:
type TProc = function: DWord;
procedure TForm1.Button1Click(Sender: TObject);
var
handle: THandle;
winver: TProc;
begin
handle := LoadLibrary('kernel32.dll'); // DLL laden
if handle = 0 then // Prüfen, ob die DLL geladen worden ist
begin
ShowMessage('Laden fehlgeschlagen');
Exit;
end;
winver := GetProcAddress(handle, 'GetVersion'); // Funktion aus der DLL ausführen
Label1.Caption := IntToStr(Lo(winver)) + '.' + IntToStr(Hi(winver));
FreeLibrary(handle); // DLL aus dem Speicher freigeben
end;
für mehr zu dem thema steht auch einiges in der online-hilfe. wenn du aber z.b. icq fernsteuern willst, brauchst du sowieso das icq-api.
analog dazu kannst du natürlich auch eigene dll's schreiben. die beiden wichtigsten unterschiede dabei bestehen eigentlich darin, dass am anfang das keyword "library" steht und die funktionen oder objekte exportiert werden können.