DLL, Dynamic Link Library (Dinamik Link Kütüphanesi) 'nin kısaltılmış şeklidir. Microsoft'un paylaşılan kütüphanelerine verdiği genel isimdir. Bu kütüphanelerde genel olarak .dll uzantısı kullanılır, ancak ek olarak .ocx (ActiveX kontrolünün olduğu kütüphaneler), .exe (çalıştırılabilir dosyaları içerenler), .src (Ekran koruyucularını içerenler) ve .drv (sistem sürücülerinin bulunduğu kütüphaneler) de kullanılabilir. Programların çalışma anında dinamik olarak bağlantı kurabileceği fonksiyonların kütüphaneleri olarak da ifade edilebilir. Bir program çalışırken ihtiyaç duyduğu fonksiyonları önce kendi içerisinde arar. Eğer bulamazsa eklenen DLL' lerde arar ve gereken fonksiyonun bulunduğu DLL' i yükler. DLL' ler çalışma anında ihtiyaç duyuldukça yüklenirler, yüklenirken fonksiyonların adres atamaları dinamik olarak yapılır. Böylece programda bellek kullanımı en az seviyede tutulur. İkili tabanda kayıt edilirler ve çalıştırılabilir kod barındırırlar. DLL dosyaları birer program olmalarına rağmen kendi başlarına çalıştırılmaları bir anlam ifade etmez. Başka programlar tarafından çağrılarak çalıştırılırlar.
DLL' in Çıkış Noktası
Windows' un ilk versiyonlarında programların çalışması için adres alanları yeterince kısıtlıydı. Tek işlemci üzerinde birden çok programın yürütülebilmesi için adres alanlarının daha etkin bir şekilde kullanılması gerekiyordu. Bu nedenle işletim sistemi operasyonlarına DOS üzerinden, yüksek seviye işlemlere de dinamik link kütüphaneleri üzerinden ulaşılması çözümü getirildi. Bu kütüphaneler programlar tarafından ortak olarak kullanılabilecek ve aynı fonksiyona ihtiyaç duyan programlar için o kütüphanenin bir kez belleğe yüklenmesi yeterli olacaktı. Örneğin; GDI (-Graphics Device Interface -Grafiksel Gösterim Arayüzü) kodları belirli cihazlara göre farklılık gösterir, Renkli Grafiksel Adaptör ve Hp Laser Jet Yazıcı gibi. API çağrısı yapılarak çağrılan cihaza göre üzerine farklı kodlar eklenerek istenilen işlem yaptırılabilir. İki işlem aynı anda yapıldığı zaman ortak olarak kullanılan kodun bulunduğu DLL' in bir kez belleğe yüklenmesi yeterlidir.
Avantajları
- C, çalışma zamanı fonksiyonlarına erişimi sağlar. Bazı programlama dillerinde elde edilemeyen fonksiyonlar C dilinde elde edilir. Bu dillerde C dili ile yazılan fonksiyonlara erişildiği zaman ortam kısıtlarından kurtulmuş olunur. Örneğin; _dos_getdiskfree fonksiyonu diskteki mevcut boş alanı hesaplamak için kullanılmaktadır. Ayrıca, C dili doğal makine kodlarına en yakın programlama dillerinden biridir. Bu dilde düzgün kodlanan programlar diğerlerine göre daha hızlıdır.
- Fonksiyonlara ya da verilere ihtiyaç duyuldukça DLL' ler belleğe yüklenir. Bu da ihtiyaç duyulan bellek miktarını düşürdüğü gibi programların yüklenme süresini kısaltır. Bilindiği üzere, .exe dosyaların büyüklükleri genel olarak ortalama bir program için küçümsenemeyecek bir boyuttadır. Program her çalıştırıldığında tüm exe hafızaya yüklenip çalıştırılır, bu da hafızanın fazlasıyla şişmesine neden olur. O yüzden tüm kodlar exe ye gömülmek yerine DLL dosyalarına bölünür ve gerektiğinde hafızaya yüklenip kullanılırlar.
- Herhangi bir dilde yazılmış bir DLL ,diğer bir dilden uygun tipte parametreler kullanılarak çağrıldığında da kullanılabilir. Diller arasında geçiş sağlandığı için programlama yeteneği artar.
- Programların bakımı ve hata gidermesi kolaydır. Program işlevlere göre dll dosyalarına bölündüğünde hata düzeltme ya da güncelleme durumunda sadece düzeltilecek fonksiyonun bulunduğu DLL' e bakmak yeterlidir.
- DLL fonksiyonları exe dosyaları içerisine yazılmadığından, exe dosyalarının diskte kapladığı toplam alan azalır. Dinamik bir kütüphaneden bir fonksiyon çağrıldığında bağlayıcı, kodu exe dosyanın içerisine yazmaz. Exe dosya içerisinde özel bir bölüme fonksiyonun hangi DLL içerisinde olduğunu yazar. Exe uzantılı dosya çalıştırılacağı zaman Windows'un yükleyici programı exe dosya ile birlikte bu dosyanın kullandığı DLL dosyalarını da belleğe yükler. Programın çalışma zamanı sırasında DLL içerisinde bulunan fonksiyonların çalışması sırasında akış dll dosyasının içerisine girerek buradaki fonksiyonu çalıştırır.
Dezavantajları
- Dinamik kütüphane kullanan bir programın başka bir makinede çalıştırılabilmesi için exe dosyasının yanı sıra dll dosyalarının da taşınması gerekir.
- Dinamik kütüphane sisteminin kullanılabilmesi için sistemin bir sanal bellek mekanizmasına sahip olması, yani genel olarak bellek probleminin olmaması gerekir. Çünkü bir dll'den bir tek fonksiyon bile çağrılacak olsa bütün modül belleğe yüklenmek zorundadır.
- Dinamik kütüphane kullanan bir programın yükleme zamanı göreli olarak daha uzundur.