| 
 | 
Api Programcılıgı Genel Bilgiler - Diğer Webmaster bilgi bankası, knowledge base Webmaster Araçları
| AnaSayfa > Diğer  > Api Programcılıgı Genel Bilgiler |  | 
 |  | Kategori | : Diğer |  | Gönderen | : Admin |  | Tarih | : 2008-10-19 |  | Puan | : 6     | Katılımcı : 2 |  | Okunma | : 5797 |  |   |   |  |   |  
 |    |   İş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 ken!  
disi 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 => 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 
 
  |   
| Yorumlar |  | Henüz Kimse Yorum Yapmamış, ilk yorumu siz ekleyin! |  | Yorum Ekleme Aparatı |  Yorum Eklemek için lütfen sol menuden giris yapınız..  |  | Toplam 0 yorum listelendi.  |  
   |