VB’ de DLL (DYNAMIC LINK LIBRARY – DİNAMİK BAÄžLI KÜTÜPHANE) KULLANIMI
Nov 5th, 2009 by Mevlüt ALTUNTERİM
DLL (DYNAMIC LINK LIBRARY – DİNAMİK BAĞLI KÜTÜPHANE) KULLANIMI
Visual Basic tarafından sağlanmayan bazı temel özellikleri kullanmak için DLL kütüphanelerinde saklanan yordamları doğrudan çağırmak mümkündür. Bu yöntem sayesinde Microsoft Windows işletim sisteminin belkemiği olan birçok yordamı ve hatta başka dillerde yazılmış başka kütüphanelere erişmek ve bu yordamları Visual Basic kodu içinde kullanmak mümkündür.
Adından da anlaşıldığı üzere DLL dosyaları birer kütüphanedir. Bu sebeple başka uygulamalar tarafından da kullanılabilirler ve üzerine yapılan eklemelerden programların çalışması etkilenmez. Microsoft Windows işletim sisteminin kendisi de DLL dosyalarından yararlanır ve başka uygulamalar da bu DLL dosyalarını kullanarak grafiksel işlemleri, bellek yönetimini ve daha bir çok değişik işlemi kolayca destekler. Sağlanan bu olanaklara Windows API (Application programming interface- Uygulama programlama arabirimi) denir.
DLL kullanımından başka Visual Basic programları içinde kullanılabilecek bir özellik de Otomasyon(Automation) olarak adlandırılan ve bir uygulamanın nesnelerini dışarıdan (başka bir programın içinden) kullanabilme olanağını sağlayan mekanizmadır. Bu DLL kullanımından daha basittir ve hatalı durumlara düşme riski daha azdır.
Bir DLL yordamını uygulamanın içinde kullanmak
DLL yordamları programın dışında olan öğeler olduğu için bunların program içinde kullanılabilmesi için, içinde bulundukları dosyanın ve yordam parametrelerinin program içinde tanımlanmaları şarttır. Bu işlem bir Declare komutu sayesinde yapılır. Herhangi bir DLL içinde bulunan bir yordam Declare komutu ile tanımlandıktan sonra programnı içindeki diğer yordamlar gibi kullanılabilir.
DLL kullanırken dikkat edilmesi gereken en önemli nokta, hatalı durumlara düşme riskinin büyük olduğudur. Bu sebeple parametrelerine ve veri türlerine dikkat etmek gerekir.
DLL kullanımına basit bir örnek olarak, USER32.DLL dosyasında bulunan ve bir pencerenin başlığını (Caption) değiştiren SetWindowText yordamının kullanılışını örnekleyelim. Bunun için önce aşağıdaki Declare deyimi kullanılarak yordam tanımlanmalıdır.
Bu örnek için yeni bir proje başlatın, formun üzerine bir CommandButton yerleştirin ve aşağıdaki kodu yazın.
Private Declare Function SetWindowText Lib “user32″ _
Alias "SetWindowTextA" (ByVal hwnd As Long, _
ByVal baslik As String) As Long
Private Sub Command1_Click()
SetWindowText Form1.hwnd, “Degismis Baslik”
End Sub
Burada önce kullanılacak yordamın tanımı yapılmıştır. Tanım yapılırken parametrelerin türüne dikkat edilmesi gerekir. Bu yordama yeni pencere başlığı ikinci parametre ile gönderilmektedir. Tanımlanan bu yordamın kullanılışı tıpkı normal bir Visual Basic yordamının kullanılışına benzemektedir.
Microsoft Windows iÅŸletim sisteminin saÄŸladığı yordamların ve sabitlerin tanımları Visual Basic ile birlikte gelen API text Viewer programı ile görülebilir. Bu program sayesinde tanımlar Visual Basic programlarının içine kopyalanabilir.Bu programın yukarıda tanımlanan yordamın tanımını kopyalarken durumu aÅŸağıdaki gibidir.Â
 Â
Bu program kullanılarak Visual Basic ile birlikte gelen;
Apiload.txt
Mapi32.txt
Win32api.txt
Dosyaları içinde yer alan DLL yordamlarının tanımlarını programın içine kopyalamak mümkündür.
Microsoft Windows API yordamlarına erişim
DLL dosyalarından programlar içinde en sık ihtiyaç duyulanları ve kullanılanları Windows API olarak bilinen, Windows işletim sisteminin sağladığı fonksiyon ve yordamları içeren DLL dosyalarıdır.
Windows API binlerce yordam, tür tanımı ve sabit tanımlarını içerir. Bu yordamlar C dilinde yazılmıştır, bu yüzden Visual Basic içinde kullanılırken dikkatli bir biçimde yeniden tanımlanmaları gerekir. Visual basic bu işlem için yukarıda da bahsedildiği gibi API Text Viewer programını ve bu tanımların Visual Basic için yapılmış halini içeren bir metin dosyasını kullanıcılara sunmaktadır.
API Text Viewer programı metin kütüklerini, daha hızlı erişim ve kolay aramayı sağlamak için Jet Veritabanlarına çevirebilme özelliğine de sahiptir.
Görüldüğü üzere Windows API yordamlarının tanımlanmasında herhangi bir sorun yoktur. Çünkü zaten hazır tanımları bulunmaktadır ve tek yapılması gereken bu tanımları Visual Basic kodunun içine almaktır.
Windows API dışındaki bir DLL dosyasından yordamlar kullanılacağı zaman uygun tanımı yapmak çok önemlidir. Aksi takdirde istenmeyen durumlar oluşabilir.
DLL içindeki bir yordamın tanımlanması
Windows API dışındaki DLL dosyaları içinden yordam kullanmak veya win32api.txt dosyası içinde yapılmış olan tanımları kendi gereksinimlerimize göre değiştirmek için DLL içindeki bir yordamın nasıl tanımlanabileceğini öğrenmek gerekir.
Bir DLL yordamını tanımlamak için Declare deyimi kullanılır. Eğer yordam bir değer döndürüyorsa Function, döndürmüyorsa Sub olarak tanımlanır. Declare deyiminin kullanışı aşağıdaki biçimdedir.
Declare Function publicname Lib “libname” [Alias "alias"]
[([[ByVal] variable [As type] [,[ByVal] variable [As type]]...])] As Type
Declare Sub publicname Lib “libname” [Alias "alias"]
[([[ByVal] variable [As type] [,[ByVal] variable [As type]]…])]
Kütühane İsmi (libname)
Windows kütüphaneleri için (User32, Kernel32 veya GDI32) dosyanın tam adını ve yolunu belirtmeye gerek yoktur. Örneğin;
Declare Function GetTickCount Lib “kernel32″ Alias _
“GetTickCount” () As Long
Diğer DLL dosyaları kullanılırken tam yol ve dosya adı verilmek zorundadır
Declare Function Topla Lib “c:\hesap.dll” _
(ByVal sayi1 As Integer, ByVal sayi2 As Integer) As Long
DLL dosyasının yolu verilmezse bu dosya için;
- Â
- Programın .EXE dosyasının bulunduğu yere,
- Aktif dizine,
- Windows’un System dizinine,
- Windows dizinine,
- PATH değişkeninde tanımlı dizinlere
bakar.
Parametre türlerini belirlemeden önce sık kullanılan bazı DLL dosyalarının tanımlarını verelim.
Advapi32.dll Advanced API services library supporting numerous APIs including many security and Registry calls
Â
Comdlg32.dll    Common dialog API library
Gdi32.dll       Graphics Device Interface API library
Kernel32.dll    Core Windows 32-bit base API support
Lz32.dll        32-bit compression routines
Mpr.dll         Multiple Provider Router library
Netapi32.dll    32-bit Network API library
Shell32.dll     32-bit Shell API library
User32.dll      Library for user interface routines
Version.dll     Version library
Winmm.dll       Windows multimedia library
Winspool.drv    Print spooler interface that contains the print spooler API calls
