Makale Özeti

Windows işletim sistemi içinde birçok nesneye veya özelliğe VB .NET dili ile ulaşmamız henüz mümkün değildir. Burada dikkat ederseniz "henüz" diyorum çünkü VB Dilinin gelişim süreci içerisindeki değişikliklere bakıldığında bu dilin zamanla etkin bir Windows tabanlı uygulama dili olacağı muhtemeldir.

Makale

VB.NET TE API KULLANIMI

    Bu yazımızda VB NET dilinde API kullanımından ve WIN32 API ile yapılabilecek uygulamalardan bahsedeceğiz.

    Windows işletim sistemi içinde birçok nesneye veya özelliğe VB .NET dili ile ulaşmamız henüz mümkün değildir. Burada dikkat ederseniz "henüz" diyorum çünkü VB Dilinin gelişim süreci içerisindeki değişikliklere bakıldığında bu dilin zamanla etkin bir Windows tabanlı uygulama dili olacağı muhtemeldir.  VB. NET dili elbetteki bir Windows tabanlı programlama dilidir. Ancak bu dil henüz Windows üzerindeki hakimiyetini tam anlamıyla kuramamıştır. Böyle eksik kalınan noktada Windows üzerinde C türevli dillerle yazılmış bazı fonksiyonların kullanımı devreye girer ki bizde bunlara  API (Application Programmer Interface- Uygulama Programı Arabirimi)  diyoruz. Ancak bir noktanın özellikle dikkatini çekmek istiyorum. VB 6.0 ile yapılabilecek işlemler oldukça sınırlı idi ve Windows un alt fonksiyonlarına ulaşamıyordu. Ama .NET ile gelen evrim ile dildeki sınırlılıklar biraz olsun azaldı. Bu nedenle  size tavsiyem VB:NET içindeki bir fonksiyon yada yordam ile yapabileceğiniz bir işlemi  API  kullanıp tanımlayarak yapmayınız bu  performans konusundan veriminizi etkiler. Ayrıca dil bütünlüğü ve veri erişimi gibi konularda bu tür bir kullanım ciddi sıkıntılar doğurur.

    Bu kadar teorik bilgiden  sonra asıl işimiz olan Kod yazmaya ve uygulama geliştirmeye dönelim. Bir API yada DLL VB.NET içinde dış assembly  olarak algılanır ve standar bir tanımlama bloğu içinde "Imports" anahtar kelimesi ile tanımlanır.

Eğer Kullanacağınız  bir fonksiyon ise:

    Örneğin User32.DLL içindeki bir Beep Fonksiyonunu tanımlayıp kullanalım Önce Proje içine Bir Class ekleyelim ve adını API olarak düzenleyelim. Class Kodu Aşağıdaki şekilde düzenlenir. Dış assembly için <DllImports("DLLadı")> şeklinde tanımlanır. 

[Public|Private] Declare Sub  "Yordam Adı" (Yordamın argümanları)

 Imports System.

Imports System.Runtime.InteropServices

Public Class API

<DllImport("kernel32.dll")> Public Shared Sub Beep(ByVal toner As Int32, ByVal sure As Int32)

End Sub

End Class

 

 

Daha sonra Form1 içindeki bir buton yerleştirelim. Kodu aşağıdaki gibi düzenleyelim.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim i, j As Integer

i = 100

j = 20

API.Beep(i, j)

Next

Next

End Sub

    Şimdi butona basalım bakalım neler olacak. Bu sadece basit bir örnekti isterseniz gelişmiş uygulamalar da yapabilirsiniz. Örneğin Disk bilgilerinizi öğrenebilirsiniz. Form üzerine İki "textbox" koyalım. Şimdi Textbox1 in adını Diskname olarak değiştirelim. Diğeride info olsun.  Gerekli Kodu düzenleyelim. Class içine aktarılacak kodu yazalım.

Imports System

Imports System.Runtime.InteropServices

Public Class API

Public Declare Function GetDiskFreeSpace Lib "kernel32" _

Alias "GetDiskFreeSpaceA" (ByVal diskadı As String, _

ByRef seektordebosalan As Integer, _

ByRef sektordekibytemiktari As Integer, _

ByRef bosalannumarası As Integer, _

ByRef Freespace As Integer) As Integer

End Class

 

    Burada değişkenleri Türkçe anlam çağrıştıran değişkenler tanımladım ki hangi değişken ne işe yarıyor daha anlaşılır olsun. Şimdide Form İçindeki kodu yazalım.

Public Class Form1

Inherits System.Windows.Forms.Form

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim diskadı As String

Dim bosalan As Integer

Dim sektoralanı As Integer

Dim bosalanno As Integer

Dim freespace As Integer

diskadı = Diskname.Text + ":\"

API.GetDiskFreeSpace(diskadı, bosalan, sektoralanı, bosalanno, freespace)

Info.Text = freespace.ToString

End Sub

End Class

 Bu kodları derlediğimizde  Bakalım neler Oluyor

A sürücüsünde disk olmadığından  0 yazıyor. Şimdide C:\ sürücüsüne bakalım.

Şimdide D:\ sürücüsünün İçeriğine Bakalım....

      Burada D:\ sürücüsünün içeriğini açıkça görebiliyorsunuz. Şimdilik bu kadar bana ulaşabileceğiniz. görüşlerinizi yazabileceğiniz. Bir mail adresim var. Görüşlerinizi benimle paylaşırsanız sevinirim. Hatırlatmak istediğim bir şey var ki her şey iyi yada kötü eleştirilerle bir noktaya gelir.

Tarık Gökhan Kızılırmak
tarikgokhan@hotmail.com