Api Nedir?
İşletim sistemlerine duyulan ihtiyaçlardan biri standart olarak her program tarafından yapılması gereken şeyleri ortak bir çatı altında toplamak ve programları sistemde belirli kurallar altında çalışmasını sağlamaktır. İşletim sistemlerinin değerini anlamak için işletim sistemi olmayan bir bilgisayar düşünün.
Yaptığınız programları diske kaydetme ihtiyacınız var. İşletim sisteminiz yoksa programlarınızı diske yazacak ve okuyacak assembly kodları sizin yazmanız gerekecektir. Ve her program diske yazma ve okuma kodlarını içinde bulundurmak zorunda olacaktır. Ayrıca diske yazacağınız programı diskin neresine yazacaksınız. Tabi ki herkes kendi programının başa yazılmasını isteyecektir. Bu da diski paylaşım sorununu çıkaracaktır. Ayrıca yazıcı için de problem vardır. Her yazıcı aynı sistemle çalışmayacağı için programınızda yazdırma işlemleri de varsa belli başlı yazıcı tipleri için gerekli kodları yazmanız gerekecektir. Bu örnekler çoğaltılabilir.
İşte PC’ler ilk çıktığında disk iÅŸlemlerini kolaylaÅŸtırmak için DOS ta piyasaya çıktı. DOS disk iÅŸlemlerini yapmak için yazılım interruptlarını programcıların hizmetine sunmuÅŸtu. Diskle ilgili bir iÅŸleminiz için INT X’in Y numaralı servisini çağırıyordunuz ve bu iÅŸlemleri sizin yerinize DOS yapıyordu. Sistemler geliÅŸtikçe bilgisayar deÄŸiÅŸik alanlara da hitap etmeye baÅŸlayınca çok deÄŸiÅŸik arabirimler de çıktı. DOS’a grafik, yazıcı iÅŸlemleri gibi standart iÅŸlemler de eklendi ve sistemde bulunan standart donanımların hemen hemen hepsine DOS veya BIOS interruptlarıyla eriÅŸebiliyordunuz. Ayrıca DOS programların belleÄŸi nasıl kullanacağını da belirliyordu. DOS iÅŸletim sistemi olarak kullanıcıya herhangi bir standart arabirim sunmamıştır. Sadece programların sistemdeki standart donanımlara ulaÅŸabilecekleri kodları kullanıcıya sunmuÅŸtur. DOS’ta yapılan programların hiçbiri bir birine benzemez. Her program kendi kullanıcı arayüzünü belirlemek zorundadır ve bunun için gerekli kodu kendisi yazmak zorundadır. DOS’ta yapılan programların kullanım ve programlanmasının zorluÄŸu da bir ölçüde buradan kaynaklanır.
DOS’un programlara standart bir arabirim sunmaması, bellek sınırlarının olması gibi sebeplerden dolayı çok çok geç kalmış olsada Windows çıktı. Windows DOS’un saÄŸladığı standart donanıma ulaÅŸma haricinde Ses kartları, GeliÅŸmiÅŸ yazıcılar, Scanner’ler gibi donanımların kullanımını da programların kullanımına sunar. Ayrıca programlara standart arabirimleri (Diyalog kutuları, Formlar, Kontroller gibi) kullanma imkanı da sunmuÅŸtur. DOS kendi servislerini yazılım interruptlarıyla sunarken Windows API’lerle sunar.
Åžimdi şöyle bir ÅŸey düşünülebilir. DOS’ta çok program yaptım ama diske birÅŸey yazdırmak için DOS’un interruptlarını kullanmaya hiç ihtiyaç duymadım. Evet eÄŸer assembly program yazmadıysanız bunlara da ihtiyacınız yoktur. Çünkü kullandığınız programlama dili bu iÅŸi sizin yerinize yapıyordu. Bu VB’de yaptığınız programlarda da böyledir. API kullanacaksınız diye bir ÅŸart yok VB bunları sizin yerinize kullanır. Ancak DOS’taki programlama dillerinde olduÄŸu gibi VB’de de programlama dilinin sunduÄŸu iÅŸlemler her zaman iÅŸinizi görmeyebilir, bu durumda Windows API’lerini kullanma ihtiyacı duyarsınız.
Basic herhalde bütün zamanların en yavaÅŸ programlar üreten dili olma özelliÄŸini kimseye kaptırmak istemiyor. Quick Basicte yaptığınız bir program, aynı iÅŸi yapan C ile yapılmış programdan en az 5 kat daha yavaÅŸ çalışacaktır. Bu fark GWBasic’te daha da büyüktür. VB’de de durumun iç açıcı olduÄŸunu iddia etmek çok güç. Programlarınızda API kullanmanız bu hız barajlarını aÅŸmanızı saÄŸlayacaktır. Ayrıca VB’nin sunmadığı bazı iÅŸlemler için de API kullanmak gerekir. ÖrneÄŸin sistemdeki boÅŸ bellek miktarını verecek herhangi bir komut VB’de bulunmaz bunu da yine API kullanarak öğrenmek zorundasınız.
Windows’un sunduÄŸu bu API’ler gruplandırılarak bir çok DLL ve EXE dosyasına konmuÅŸtur. VB’de kullanılan OCX dosyalarında da API’ler bulunabilir. Bu API’lerden birini kullandığınızda API’nin bulunduÄŸu DLL sisteme daha önce yüklenmemiÅŸse önce bu DLL yüklenir ve API çalıştırılır.
Programınızda API kullanmak için Declare deyimiyle API’yi tanımlamanız gerekir. Bu tanımdan sonra tanımladığınız API’ye bir fonksiyon veya bir altprogram gibi ulaÅŸabilirsiniz.
VB’de API Tanımı
VB’de API’ler iki ÅŸekilde tanımlanabilir. Fonksiyon veya altprogram olarak. Fonksiyon olarak tanımlanan API’lerden geriye bir deÄŸer dönerken, altprogram olarak tanımlananlardan bir deÄŸer geri dönmez.
Alt program olarak API tanımı:
Private/Public Declare Sub isim Lib “libname” [([parametreler])]
Fonksiyon program olarak API tanımı:
Private/Public Declare Function isim Lib libname [([parametreler])] [As tip]
Burada isim fonksiyonun ismidir ve programda API bu isimle çağrılır. Libname kullanılan kütüphanenin ismi, parametreler; fonksiyona giren parametreler, As tip; fonksiyondan dönen değerin tipidir.
API’nin tanımlanacağı yer formun veya modülün General-Declerations kısmıdır. API’yi bir formun decleration kısmında tanımlarsanız API’yi yalnız o formun altprogramlarından çağırabilirsiniz. Bir modülde tanımlarsanız programınızın her yerinde kullanabilirsiniz.
API’yi doÄŸru olarak tanımladığınız halde VB, ilgili dosyada böyle bir API bulunmadığını söylüyorsa veya API ile aynı isme sahip bir VB komutu var ise bu durumda Alias isimleri kullanmanız gerekir.
Private/Public Declare Function/Sub isim Lib libname Alias “isim” [([parametreler])] [As tip]
API’yi doÄŸru olarak tanımladığınız halde VB, ilgili dosyada böyle bir API bulunmadığını söylüyorsa API isminin sonuna A ekleyerek Alias ismi olarak vermeniz gerekir. Bunun sebebi Windows iÅŸletim sisitemi farklı dilleri desteklemektedir. ANSI karakter setini destekleyen ülkler için sonuna A harfi, UniCode veya iki karekter geniÅŸliÄŸini kullanan ülke seti için ise sonuna W harfi eklemeniz gerekir.
API tanımı yaparken kullanacağınız tiplerin isimlerini ise C’den VB’ye çevirmeniz gerekir. Genel olarak tip karşılıkları şöyledir.
C Visual Basic
atom ByVal deÄŸiÅŸken AS integer
bool ByVal deÄŸiÅŸken As Long
byte ByVal deÄŸiÅŸken As Byte
char ByVal deÄŸiÅŸken As Byte
colorref ByVal deÄŸiÅŸken As Long
dword ByVal deÄŸiÅŸken As Long
hwnd,hdc,hmenu vb ByVal deÄŸiÅŸken As Long
int,uint ByVal deÄŸiÅŸken As Long
long ByVal deÄŸiÅŸken As Long
lparam ByVal deÄŸiÅŸken As Long
lpdword deÄŸiÅŸken As Long
lpint,lpuint deÄŸiÅŸken As Long
Iprect deÄŸiÅŸken As type
Ipstr,Ipcstr ByVal deÄŸiÅŸken As String
Ipvoid deÄŸiÅŸken As Any
lpword deÄŸiÅŸken As Integer
lresult ByVal deÄŸiÅŸken As Long
null deÄŸiÅŸken As Any veya ByVal deÄŸiÅŸken As Long
short ByVal deÄŸiÅŸken As Integer
void Sub procedure
word ByVal deÄŸiÅŸken As Integer
wparam ByVal deÄŸiÅŸken As Long
16 bit ByVal deÄŸiÅŸken As Integer
32 bit ByVal deÄŸiÅŸken As Long
float ByVal deÄŸiÅŸken As Single
double ByVal deÄŸiÅŸken As Double
Parametrelerden biri iki farklı tipte değer alabiliyorsa bunu As Any olarak tanımlamanız gerekir. Hangi parametrenin Any olarak tanımlanması gerektiğine ancak dosyadaki bilgileri okuyarak anlayabilirsiniz. Örneğin bir parametre hem string içerebiliyor ve hemde Null içerebiliyorsa bu parametre Any olarak tanımlanmalıdır.
Yaptıkları iÅŸlere göre API’lerin bulundukları dosyalar ise ÅŸunlardır :
DLL Fonksiyonları
Advapi32.dll Åžifre ve Kayıt dosyası iÅŸlemleri gibi geliÅŸmiÅŸ bir çok API’ler
Comdlg32.dll Diyalog pencereleri ile ilgili API’ler
Gdi32.dll Grafik API’leri
Kernel32.dll Çekirdek Windows API’leri
Lz32.dll 32 bit skıştırma API’leri
Mpr.dll Multiple Provider Router API’leri
Netapi32.dll 32-bit Network API’leri
Shell32.dll 32-bit Shell API’leri
User32.dll Kullanıcı arabirimi API’leri
Version.dll Versiyon iÅŸlemleri API’leri
Winmm.dll Multimedia API’leri
Winspool.drv Print spooler API’leri




Istediginiz programi,resmi,muzigi vs.bir tiklama ile bulmak hos olurdu degil mi? O zaman www.teknoprogram.com 'dan baska bir yere ayrilmayin!

