Başlangıç > Kodlar > Visual Basic 6 ile Clone Object ve Serialize object örneği

Visual Basic 6 ile Clone Object ve Serialize object örneği


Obje değişkenleri ile sıkça çalışıyorsanız ihtiyaç duyacağınız iki konu. Klonlama ve serializasyon öncelikle kavramları terminolojik olarak açıklamaya çalışayım.


Obje Klonlama (Object Cloning)


Yeni nesil (Visual) tüm programlama dillerinde artık objesiz geliştirme yapmak mümkün değil, gerek kendi geliştirdiğiniz gerek IDE'nin sunduğu gerekse 3. parti objeleri kullanarak geliştirme yapıyoruz adına da OOP veya OBP diyoruz. VB de obje değişkenler ile çalışırken muhakkak kulandığınız objenin bir kopyasını alma ihtiyacı hissetmişsinizdir. Muhtemelen de benim gibi sizde aynı objeden bir tane daha declare edip elinizdekini diğerine set etmişsiniz
Örnek;


Dim rstA As Recordset
Dim rstA_Kopya As Recordset

Set rstA = New Recordset
'
'rstA oluşturuyor
'
rstA.Open
'Bu noktada rstA'nın kopyasına ihtiyacınız oldu.
Set rstA_Kopya = rstA
'Yaptınız ama set işlemi rstA'nın referansını rstA_Kopya değişkenine attığı için istediğiniz olmadı yani herhangi birinde yaptığınız bir değişiklik iki değişkenide etkiliyor.

ve bu şekilde olmadığını görmüşsünüzdür.

Bu işin iki yolu var ya obje kendi kopyasını (Klonunu) size verecek,
Örnek;


Dim rstA As Recordset
Dim rstA_Kopya As Recordset

Set rstA = New Recordset
'
'rstA oluşturuyor
'
rstA.Open
Set rstA_Kopya = rstA.Clone


yada siz objeyi bir fonksiyona gönderip o fonksiyondan objenin kopyasını (Klonunu) geri döndüreceksiniz.
Örnek;


Dim rstA As Recordset
Dim rstA_Kopya As Recordset

Set rstA = New Recordset
'
'rstA oluşturuyor
'
rstA.Open
Set rstA_Kopya = VBCloneObject(rstA)


ilk yöntemi kendi yazdığınız objeler üzerinde gerçekleştirmeniz kolay ama kullandığınız ve açık kaynak kodlu olmayan objeler için böyle bir şansınız yok. Dolayısı ile ikinci yöntemi kullanmanız gerekecek.

İkinci yöntemin de örneği aşağıdaki gibi olmalı.


Dim rstA As Recordset
Dim rstA_Kopya As Recordset

Set rstA = New Recordset
'
'rstA oluşturuyor
'
rstA.Open
Set rstA_Kopya = VBCloneObject(rstA)

Public Function VBCloneObject(obj As Object) As Object
Dim pb As PropertyBag
Set pb = New PropertyBag
pb.WriteProperty "Obj", obj
Set VBCloneObject = pb.ReadProperty("Obj")
Set pb = Nothing
End Function

Burda dikkat edilmesi gereken tek şey Klonlanacak objenin Persistable olması.


Obje Serializasyon (Object Serialization)


Serializasyon yöntemi de bir nevi klonlama gibi farkı ise objeji bir dosyaya kaydedip sonraki bir zaman da veya başka bir makinede o dosyadan o objeji aynı haliyle tekrar oluşturabilmek.

Örnek kodlama aşağıdaki gibi;


Dim rstA As Recordset
Dim rstA_Seri As Recordset

Set rstA = New Recordset
'
'rstA oluşturuyor
'
rstA.Open
MsgBox "Obje " & VBSerializeObject(rstA) & " Dosyasına kaydedildi."

set rstA_Seri = VBDeSerializeObject("obj.srlz")

Public Function VBSerializeObject(obj As Object) As String
Dim i As Long
Dim strContents As String
Dim pb As PropertyBag
Set pb = New PropertyBag
pb.WriteProperty "Obj", obj

Open "obj.srlz" For Binary Access Write As #1
Put #1, , pb.Contents
Close #1

VBSerializeObject = App.Path & "\obj.srlz"
Set pb = Nothing

End Function

Public Function VBDeSerializeObject(filePath As String) As Object
Dim i As Long
Dim lLen As Long
Dim byteArray() As Byte
Dim byteArrayO() As Byte
Dim pb As PropertyBag
Set pb = New PropertyBag

Open filePath For Binary Access Read As #1
lLen = FileLen(filePath)
ReDim byteArray(lLen - 1)
Get #1, , byteArray
Close #1

ReDim byteArrayO(UBound(byteArray) - 12)
For i = 12 To UBound(byteArray)
byteArrayO(i - 12) = byteArray(i)
Next i

ReDim byteArray(0)

pb.Contents = byteArrayO

Set VBDeSerializeObject = pb.ReadProperty("Obj")
Set pb = Nothing
ReDim byteArrayO(0)

End Function

 


TD Software


  1. Henüz yorum yapılmamış.
  1. No trackbacks yet.

Yorum bırakın