VB .Net ‘te Klasik COM Bileşenleri Ve Arayüzlerinin Kullanımı
.Net öncesi dönemde, COM teknolojisini destekleyen dillerle bileşen (component) tabanlı programlar yazıyorduk. COM; basitçe yeni bileşenler yaratmak veya varolan bileşenleri uygulamalar yada başka bileşenler içerisinden kullanmak için Microsoft tarafından tanımlanmış bir teknolojidi idi. COM teknolojisi sayesinde dilden bağımsız bileşenler tasarlamak ve COM destekli diller arasında bu bileşenleri kullanmak mümkündür.
Sizin de .Net ile tanışmadığımız dönemden, miras olarak kalmış ve bugün VB .Net uygulamalarınız içerisinden kullanmak istediğiniz COM bileşenleriniz olabilir. Bu isteğinizi gerçekleştirebilemenizi sağlayacak bilgiler yazının ilerleyen kısımlarında verilecektir. Ancak yazının konusu “VB .Net ‘te COM bileşenleri ve arayüzlerinin kullanılması” olduğu için COM teknolojisinin detaylarına girilmeyecektir. Bu sebeble COM teknolojisi ile ilgili temel kavramları bildiğinizi kabul ederek yazının bundan sonraki kısmına VB 6.0 ‘da birer COM bileşeni ve arayüzü içeren bir ActiweX DLL projesi yapıp daha sonra bu bileşeni, VB .Net ‘te ile yazacağımız uygulama tarafından referanse ederek kullanacağınız örnek bir uygulama ile devam edeceğiz.

Yapacağımız örnek uygulama client / server mimari ile çalışan ve aritmetik hesapların yapılmasına yönelik basit bir uygulama olacak. Uygulamanın server tarafı VB 6.0 ile yazılmış bir COM bileşeninden, client tarafı ise VB .Net ile yazılmış ve bu COM server’ı kullanan bir windows uygulamasından oluşacaktır.
1. Adım (Arayüzün Tanımlanması)
VB 6.0 ‘da bunun yolu hiç bir implementasyon kodu içermeyen soyut bir sınıf tasarlamaktır.
VB 6.0 ‘da MegaCalculator isminde ve türü ActiweX DLL olan yeni bir proje başlatın. Projeye eklenen sınıfın ismini IMegaCalc olarak değiştirin. (Sınıfın başında koyduğunuz I belirteci sınıfın bir interface olduğunu belirtmektedir) Bu sınıf soyut bir sınıf olduğu için sadece üyelerinin prototiplerini içermektedir. IMegaCalc sınıfının kodları aşağıda verilmiştir.

‘IMegaCalc SınıfıOption Explicit
Public Sub AddInput(inputvalue As Integer)
End Sub
Public Sub DoCalculation()
End Sub
Public Function GetOutput() As Double
End Function
Public Sub Reset()
End Sub
Bu kodları yazdıktan sonra projeyi “File | Make MegaCalculator.dll” ile derleyebilirisiniz. Bu sayede dll olarak derlenmiş ve register edilmiş bir bileşen arayüzünüz oldu. Projenizi kaydedip VB 6.0 ‘dan çıkabilirsiniz.
2. Adım (Bileşenin İmplementasyonu)
Bu aşamada ise bileşenin operasyonel kodlarının bulunduğu yeni bir ActiweX DLL projesi yaratacağız. Bunun için VB 6.0 ‘da ismi MeanCalculator ve türü ActiweX DLL olan yeni bir proje başlatın. Proje açıldıktan sonra ilk işiniz “Project | Referances” seçeneğinden MegaCalculator projesini referanse etmek olsun. Bundan sonra projenize eklenen sınıfın ismini ise MeanCalculator olarak değiştirin. Aşağıda MeanCalculator sınıfının kodları verilmiştir.

‘MeanCalculator Sınıfı
Option Explicit
Implements IMegaCalc
Dim mValue As Integer
Dim mValues() As Double
Dim mMean As Double
Private Sub Class_Initialize()
‘Constructor
IMegaCalc_Reset
End Sub
Private Sub IMegaCalc_AddInput(inputvalue As Integer)
mValue = mValue + 1
ReDim Preserve mValues(mValue)
mValues(mValue) = inputvalue
End Sub
Private Sub IMegaCalc_DoCalculation()
Dim value As Integer
mMean = 0
If mValue = 0 Then Exit Sub
For value = 1 To mValue
mMean = mMean + mValues(value)
Next
mMean = mMean / mValue
End Sub
Private Function IMegaCalc_GetOutput() As Double
IMegaCalc_GetOutput = mMean
End Function
Private Sub IMegaCalc_Reset()
mValue = 0
End Sub
Bu kodları yazdıktan sonra projenizi “File | Make MeanCalculator.dll” olarak derleyin. Artık projenizi kaydedip VB 6.0 ‘dan çıkabilirsiniz. (Bu projeyi ‘de bir önceki ile aynı dizine kaydetmeniz düzenli çalışabilmek açısından faydalı olacaktır !)
3. Adım (Client Uygulamanın Yaratılması)
Client uygulama VB .Net içerisinde yaratacağımız bir Windows Appilaction projesinden ibaret. Bu uygulamanın görevi ise; yarattığımız COM bileşenini (MeanCalculator.dll) kullanarak çeşitli işlemler yapmak. Client uygulamanın bu bileşendeki fonksiyonları kullanabilmesi için, bileşenin uygulamaya tanıtılması, yani referanse edilmesi gerekmektedir. Referanse etme işlemi VB 6.0 ‘dakine benzer tarzda ve şöyle yapılmaktadır; “Project | Add Referance” seçeneğinde COM tab ‘ına geçin ve listeden “MeanCalculator” ı bularak projenize ekleyin. Çıkan mesaj penceresinde “Yes” demeniz gerekmektedir ! Bu aşamada Solution Explorer ‘da referances seçeneğine baktığınızda “MeanCalculator” ve onun kendi içerisinde referanse ettiği, “MegaCalculator” ‘ın eklendiğini görebilirsiniz.
Artık kullanıcı arabirimini yaratabilirsiniz. Arabirim için aşağıdaki resmi örnek alabilirsiniz ;
TextBox’ların ismileri sırsıyla “txtInput” ve “txtOutput” tur. Arabirimi bu şekilde hazırladıktan sonra, artık client side kodları yazabiliriz.

Public Class Form1
Inherits System.Windows.Forms.Form
Dim oMean As MeanCalculator.MeanCalc
Public Sub New()
MyBase.New()
‘This call is required by the Windows Form Designer. InitializeComponent()
‘Add any initialization after the InitializeComponent() call
oMean = New MeanCalculator.MeanCalc()
End Sub
Private Sub btnAdd_Click(…) Handles btnAdd.Click
oMean.AddInput(CDbl(txtInput.Text))
End Sub
Private Sub btnCalculate_Click(…) Handles btnCalculate.Click
oMean.DoCalculation()
txtOutput.Text = oMean.GetOutput()
End Sub
Private Sub btnReset_Click(…) Handles btnReset.Click
oMean.Reset()
End Sub
End Class
Kodu kısaca incelersek, global olarak tanımlanmış oMean nesnesi; MeanCalculator namespace’indeki MeanCalc sınıfı türündendir. Ancak bu nesnenin türetilme işlemi form sınıfının constructor ‘ında yapılmıştır. Bunun amacı; form nesnesi türetilir türetilmez oMean nesnesinin de türetilmek istenmesidir. Daha sonra bu nesnenin metotları kullanılarak işlemler client side ‘ta arabirim ile etkileşimli olarak yapılmaktadır.