Delphi’de DLL dosyalarını 2 türlü kullanabiliriz.

  • Statik Kullanım
  • Dinamik Kullanım

Bu ikisi arasındaki farkı daha iyi anlayabilmek için öncelikle örnek bir DLL hazırlayalım.

Bu örnekteki fonksiyon sadece verilen real tipindeki sayısı 2 ile çarpıp sonucu döndürecektir.

library ornekdll;

uses
SysUtils,
Classes;

{$R *.res}
function hesapla( r: real ): real; stdcall;
begin
result := r * 2;
end;
exports
hesapla;
begin
end.

yukarıdaki kodlara göre hazırlamış olduğumuz dll dosyamızı şimdi de projemizde kullanalım.

untMain;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
function hesapla ( r: real ): real; stdcall; external ‘ornekdll.dll’;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
showMessage ( floatToStr ( hesapla ( 10.5 ) ) );
end;
end.

Burada görüldüğü gibi hesapla isimli fonksiyon OrnekDLL.DLL dosyasından alınmış ve kullanılmıştır. Eğer dll dosyamızın adı değişirse veya başka bir klasörde olursa programımız kesinlikle çalışmayacaktır.

Dinamik Kullanım:

Aşağıdaki örnekte dll dosyamızın adı değişse veya farklı bir klasörde olsa dahi programımız çalışacaktır. Tabi ki dll dosyamızın adını ve yolunu bir şekilde programımıza tekrar vermemiz gerekecektir.

unit untMain;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
Thesapla = function ( r: real ): real;

TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
hndDLLHandle: THandle;
hesapla: Thesapla;
begin
try
// verdiğimiz dll dosyasını yükle
hndDLLHandle := loadLibrary ( ‘ornekdll.dll’ );

if hndDLLHandle <> 0 then begin

// dll içinden hesapla isimli fonksiyonu bul
@hesapla := getProcAddress ( hndDLLHandle, ‘hesapla’ );

// eğer yüklenen dll içinde istediğim fonksiyon mevcutsa
if addr ( hesapla ) <> nil then begin
// sonucu 21 olarak görüntüle
showMessage ( floatToStr ( hesapla ( 10.5 ) ) );
end else
// Dll içinde fonksiyon bulunamadı mesajı ver
showMessage ( ‘Fonksiyon bulunamadı…’ );

end else
// DLL bulunamadı veya yüklenemedi mesajı ver.
showMessage ( ‘DLL bulunamadı…’ );

finally
// DLL ile işimiz bitince tekrar hafızadan kaldır
freeLibrary ( hndDLLHandle );
end;
end;

end.

Etiketler : Etiket Yok
Kategoriler : Delphi
Yorumlar : 0 Yorum Yorum Yaz

Yorumlar

Yorum Eklenmemiş...

Yorum Yaz

Adınız: *
E-Mail Adresiniz: *
Web Sitesi:
Yorum: *
Güvenlik Kodu: *
 
Arama
  Ara
Dil Seçin
Sayfalar
Son Yorumlar
Sayfalar
Blog Sayaç
Tag Bulutu