Arşiv

Boxing, değer türünden bir değişkeni referans türünden bir değişkene aktarmaktır. Unboxing ise bunun tam tersi yani referans türünden bir değişkeni değer türünden bir değişkene aktarmaktır.

Boxing işlemi için aşağıdaki gibi bir örnek uygulama yapalım:

 Module Module1

    Sub Main()

        Dim mesaj As String

        Dim boxing As Object

 

        mesaj = "İlk mesajımız"

 

        boxing = mesaj

 

        Console.WriteLine(mesaj)

        Console.WriteLine(boxing)

 

        mesaj = "Yeni Mesajımız"

 

        Console.WriteLine(mesaj)

        Console.WriteLine(boxing)

 

        Console.ReadLine()

    End Sub

End Module

 

Kodumuzu çalıştırdığımızda

İlk Mesajımız

İlk Mesajımız

Yeni Mesajımız

İlk Mesajımız

Şeklinde çıktı verdiğini görürüz.

Kodumuzu adım adım açıklayalım;

Kodumuzda görüldüğü gibi boxing değişkenini object tipinde tanımlayarak referans tipinde bir değişken elde ettik.  Mesaj değişkenini ise string türünde tanımlayarak değer tipinde bir değişken elde ettik.

mesaj = "İlk mesajımız"

satırı ile mesaj değişkenine “İlk mesajımız” değeri aktarılmıştır. Mesaj değişkeni değer türünden bir değişken olduğu için “İlk mesajımız” değerinin bir kopyası hafızada saklanacaktır.

Boxing=mesaj

Satırı ile değer türünden olan mesaj değişkenini, referans türünden olan boxing değişkenine aktardık.

Console.WriteLine(mesaj)

Komut satırı ile mesaj değişkeninin içeriği olan “İlk mesajımız”  yazısını ekrana yazdırdık.

Console.WriteLine(boxing)

Satırı ile, boxing değişkenini mesaj değişkenine eşitlediğimiz için boxing değişkeninin içeriğini yazdırdığımızda da  “İlk mesajımız”  yazısını ekrana geldi.

mesaj = "Yeni Mesajımız"

satırı ile mesaj değişkeninin içeriğini değiştirerek “Yeni Mesajımız” değerini aktardık.

Console.WriteLine(mesaj)

Satırında mesaj değişkeninin içeriğini değiştirdiğimiz için “Yeni Mesajımız” değerini ekrana yazmaktadır.

Console.WriteLine(boxing)

Satırında ise mesaj değişkeninin içeriğinde yapılan değişiklik object türünden olan boxing değişkenimize yansımamıştır.  Çünkü boxing işlemi ile boxing değişkeni, mesaj değişkeninin hafızadaki kopyasını görüntülemektedir. Mesaj değişkeninin içeriğinde yapılan değişiklik ise mesaj değişkeninin hafızadaki gerçek değerini değiştirdiği için yapılan bu değişiklik boxing değişkeninin içeriğini etkilememektedir. Dolayısı ile ekranda mesaj değişkeninin ilk kopya değeri olan “İlk mesajımız” değeri görüntülenmektedir.

 

UnBoxing işlemi için aşağıdaki gibi bir örnek uygulama yapalım:

Module Module1

    Sub Main()

        Dim mesaj As String

        Dim boxing As Object

 

        mesaj = "İlk mesajımız"

 

        boxing = mesaj

 

        Console.WriteLine(mesaj)

        Console.WriteLine(boxing)

 

        mesaj = "Yeni Mesajımız"

 

        Console.WriteLine(mesaj)

        Console.WriteLine(boxing)

 

 

        Dim digermesaj As String = CStr(boxing)

 

        Console.WriteLine(digermesaj)

 

        Console.ReadLine()

    End Sub

End Module

 

Kodumuzu çalıştırdığımızda

İlk Mesajımız

İlk Mesajımız

Yeni Mesajımız

İlk Mesajımız

İlk Mesajımız

Şeklinde çıktı verdiğini görürüz.

Kodumuzda yaptığımız değişiklikleri açıklayalım;

Dim digermesaj As String = CStr(boxing)

Satırı ile digermesaj adlı bir değişken tanımlayarak boxing değişkeninin içeriğini ona aktarıyoruz. Boxing işleminin tersine olarak boxing değişkeninin hafızada belirttiği veri referans türü olarak alınıp digermesaj değişkeninin içeriğine değer tipi olarak kopyalanır. Burada oluşacak tip uyuşmazlığını aşmak için de Cstr fonksiyonu ile referans tipteki verimizin türünü değer tipteki verimizin türüne yani String veri tipine dönüştürüyoruz.

Console.WriteLine(digermesaj)

Satırı ile digermesaj değişkenimizin içeriğini görüntüleriz. Digermesaj değişkeninin içeriğinde artık boxing değişkeninin içerdiği ilk mesaj değişkeninin hafızaya alınmış ilk kopyası olduğu için “İlk mesajımız” şeklinde çıktı üretecektir.

 

 

Kodumuzu adım adım açıklayalım;

Kodumuzda görüldüğü gibi boxing değişkenini object tipinde tanımlayarak referans tipinde bir değişken elde ettik.  Mesaj değişkenini ise string türünde tanımlayarak değer tipinde bir değişken elde ettik.

mesaj = "İlk mesajımız"

satırı ile mesaj değişkenine “İlk mesajımız” değeri aktarılmıştır. Mesaj değişkeni değer türünden bir değişken olduğu için “İlk mesajımız” değerinin bir kopyası hafızada saklanacaktır.

Boxing=mesaj

Satırı ile değer türünden olan mesaj değişkenini, referans türünden olan boxing değişkenine aktardık.

Console.WriteLine(mesaj)

Komut satırı ile mesaj değişkeninin içeriği olan “İlk mesajımız”  yazısını ekrana yazdırdık.

Console.WriteLine(boxing)

Satırı ile, boxing değişkenini mesaj değişkenine eşitlediğimiz için boxing değişkeninin içeriğini yazdırdığımızda da  “İlk mesajımız”  yazısını ekrana geldi.

mesaj = "Yeni Mesajımız"

satırı ile mesaj değişkeninin içeriğini değiştirerek “Yeni Mesajımız” değerini aktardık.

Console.WriteLine(mesaj)

Satırında mesaj değişkeninin içeriğini değiştirdiğimiz için “Yeni Mesajımız” değerini ekrana yazmaktadır.

Console.WriteLine(boxing)

Satırında ise mesaj değişkeninin içeriğinde yapılan değişiklik object türünden olan boxing değişkenimize yansımamıştır.  Çünkü boxing işlemi ile boxing değişkeni, mesaj değişkeninin hafızadaki kopyasını görüntülemektedir. Mesaj değişkeninin içeriğinde yapılan değişiklik ise mesaj değişkeninin hafızadaki gerçek değerini değiştirdiği için yapılan bu değişiklik boxing değişkeninin içeriğini etkilememektedir. Dolayısı ile ekranda mesaj değişkeninin ilk kopya değeri olan “İlk mesajımız” değeri görüntülenmektedir.

 

UnBoxing işlemi için aşağıdaki gibi bir örnek uygulama yapalım:

Module Module1

    Sub Main()

        Dim mesaj As String

        Dim boxing As Object

 

        mesaj = "İlk mesajımız"

 

        boxing = mesaj

 

        Console.WriteLine(mesaj)

        Console.WriteLine(boxing)

 

        mesaj = "Yeni Mesajımız"

 

        Console.WriteLine(mesaj)

        Console.WriteLine(boxing)

 

 

        Dim digermesaj As String = CStr(boxing)

 

        Console.WriteLine(digermesaj)

 

        Console.ReadLine()

    End Sub

End Module

 

Kodumuzu çalıştırdığımızda

İlk Mesajımız

İlk Mesajımız

Yeni Mesajımız

İlk Mesajımız

İlk Mesajımız

Şeklinde çıktı verdiğini görürüz.

Kodumuzda yaptığımız değişiklikleri açıklayalım;

Dim digermesaj As String = CStr(boxing)

Satırı ile digermesaj adlı bir değişken tanımlayarak boxing değişkeninin içeriğini ona aktarıyoruz. Boxing işleminin tersine olarak boxing değişkeninin hafızada belirttiği veri referans türü olarak alınıp digermesaj değişkeninin içeriğine değer tipi olarak kopyalanır. Burada oluşacak tip uyuşmazlığını aşmak için de Cstr fonksiyonu ile referans tipteki verimizin türünü değer tipteki verimizin türüne yani String veri tipine dönüştürüyoruz.

Console.WriteLine(digermesaj)

Satırı ile digermesaj değişkenimizin içeriğini görüntüleriz. Digermesaj değişkeninin içeriğinde artık boxing değişkeninin içerdiği ilk mesaj değişkeninin hafızaya alınmış ilk kopyası olduğu için “İlk mesajımız” şeklinde çıktı üretecektir.

Etiketler : VB.Net
Kategoriler : VB.Net
Yorumlar : 2 Yorum Yorum Yaz

Değer tipleri değişkenleri içerdikleri verinin bir kopyasını oluşturarak yalnızca kendisine gönderilen veriyi saklarlar. Diğer değişkenleri etkilemezler. ByVal ifadesi ile belirtilirler.

Referans tipi değişkenler ise direkt olarak veriyi saklamak yerine verinin hafızada saklanacağı adresi saklarlar. Dolayısı ile aynı hafıza bölgesine adresleme yapan diğer referans değişkenlerini etkileyebilirler. ByRef ifadesi ile belirtilirler.

 

Örnek bir uygulama yapalım;

Public Class Form1

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

        Dim mesaj As String

 

        mesaj = "Ana Program tarafından oluşturulan mesaj"

 

        MsgBox(mesaj)

 

        mesajyaz(mesaj)

 

        MsgBox(mesaj)

    End Sub

 

    Private Function mesajyaz(ByVal mesaj As String)

        mesaj = "Alt Program tarafından oluşturulan mesaj"

    End Function

End Class

 

Örneğimiz çalıştırdığımızda her iki defasında da “Ana Program tarafından oluşturulan mesaj” mesajını görüntülemektedir. Çünkü fonksiyonumuzu değer tipinde tanımladığımız için mesaj değişkeninin içeriğinde yapılan değişiklik ana programdaki mesaj değişkeninin içeriğini etkilememektedir.

Public Class Form1

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

        Dim mesaj As String

 

        mesaj = "Ana Program tarafından oluşturulan mesaj"

 

        MsgBox(mesaj)

 

        mesajyaz(mesaj)

 

        MsgBox(mesaj)

    End Sub

 

    Private Function mesajyaz(ByRef mesaj As String)

        mesaj = "Alt Program tarafından oluşturulan mesaj"

    End Function

End Class

 

Alt programda tanımladığımız mesaj değişkeninin Byref ile referans tipte tanımlayıp kodumuzu çalıştırdığımızda ise önce “Ana Program tarafından oluşturulan mesaj” mesajını daha sonra ise “Alt Program tarafından oluşturulan mesaj” mesajını görüntülemektedir. Çünkü fonksiyonumuzu referans tipinde tanımladığımız için mesaj değişkeninin içeriğinde yapılan değişiklik ana programdaki mesaj değişkeninin içeriğini de etkilemekte ve yeni içerik görüntülenmektedir.

Proje dosyalarının linki:

http://www.volkanaktas.com/PrgDosya/vbnet/Byval_Byref.rar

Etiketler : VB.Net
Kategoriler : VB.Net
Yorumlar : 0 Yorum Yorum Yaz

SQL Server Management Studio 2008 ile server'ınızdaki SQL veri tabanınıza bağlanmaya kalktığınızda ve "Object Explorer" penceresindeki "Databases" düğümüne tıkladığınızda aşağıdaki gibi “Failed to retrieve data for this request. (Micosoft.SqlServer. Management. Sdk.Sfc)” şeklinde  bir hata alabilirsiniz. Bu sizin veri tabanınızdan kaynaklanan bir hata değildir.

 

Sizinle aynı serverda bulunan SQL veri tabanlarından en az birinin AutoClose özelliğinin True olmasından kaynaklanmaktadır. Bunun SQL 2008 içerisinde maalesef çözümü yok henüz.

Server içerisine girilip ilgili veri tabanının properties penceresinden Options sekmesinin seçilip AutoClose özelliğinin False yapılması gerekmekte.

Etiketler : SQL
Kategoriler : MS SQL
Yorumlar : 0 Yorum Yorum Yaz

CWSE: Certified Web Security Expert ünvanı almaya hak kazananlar aşağıdaki gibidir;

Suat ÜRE
Funda GÜDÜCÜ
Cemil AKKUM
Murat SOLMAZ
Dağıstan KIZILTAN
İbrahim YAŞAR
Yasemin ASLAN
Hakan SAKAR
Volkan AKTAŞ
Bilgehan AKSAY
Ergün ŞAHİN
Bünyamin KARAHAN
Turaç ENGİN
Onur ATEŞ
Hakan PAMUKÇU
Turgay AKÇİMEN
Mehmet Emrullah İNCEARIK

Kazanan arkadaşları tebrik ediyorum. Ben de varım içlerinde :)

Kazanamayan arkadaşlar üzülmesin. Diğer sınavlara girme hakları var. Merak edenler varsa söyleyeyim benim de 2 tane yanlışım varmış. Tamamı doğru değil yani :)

Etiketler : Web Güvenliği
Kategoriler : Duyurular
Yorumlar : 0 Yorum Yorum Yaz

Kursda çektiğimiz pek çok resimden bir kaç tanesini ekliyorum. Daha fazlasını isteyen benimle bizzat irtibata geçebilir.

Etiketler : Web Güvenliği
Kategoriler : Diğer Konular
Yorumlar : 0 Yorum Yorum Yaz

Bir soru münasebeti ile geçmiş yıllarda Visual Basic 6 ile yaptığım projelerde kullandığım program koruması aklıma geldi. Sizlerle de paylaşayım direkt Visual Basic 6 projelerinizde kullanabilir ya da Visual Basic.NET'e dönüştürerek VB.NET projelerinizde kullanabilirsiniz. Zaman olur da ben dönüştürürsem buradan yayınlarım.

Program ilk çalıştığında yükleneceği bilgisayarın hdd seri numarasını okuyup, bunu bir şifreleme algoritması ile şifrelemeye tabi tutup ilk çalışmada kaydediyor. Daha sonra çalışmalarda ise bunu sormuyor bir daha.

Eğer yeniden yükleme yapılırsa bu şifrelenmiş dosyayı okuyup doğru değerler var ise kurulum yapıyordu.

 

Elden geldiği kadar ilgili kodları derleyip yazmaya çalıştım. Kendinize göre düzenlersiniz.

’ İlk defa çalışılıp çalışılmadığını anlamak için registry tanımlaması

Dim d, x, Y, ts

Dim password As String ’sifre cozme

’Hdd seri numarası okumak için tanımlama
Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" ( _
       ByVal lpRootPathName As String, _
       ByVal lpVolumeNameBuffer As String, _
       ByVal nVolumeNameSize As Long, _
       lpVolumeSerialNumber As Long, _
       lpMaximumComponentLength As Long, _
       lpfileSystemFlags As Long, _
       ByVal lpFileSystemNameBuffer As String, _
       ByVal nFileSystemNameSize As Long) As Long

 

  ’Program ilk çalışmasında registera değer yazar ve her çalışmasında registerdan değer okur. Ben bir kreş için yaptığım için registry de Kres anahtarını ekledim.

  d = GetSetting("Kres", "Ayarlar", "İlk Giriş", "")
  x = GetSetting("Kres", "Ayarlar", "tekrar", "")
  Y = GetSetting("Kres", "Ayarlar", "Son Giriş", "")


If d = "" Then
    ’Bu bilgisayarda ilk defa çalışıyor

SaveSetting "Kres", "Ayarlar", "İlk Giriş", Date
    MsgBox "Program bu bilgisayarda ilk defa çalışıyor" & vbCrLf & "Geçici Kullanıcı adı v, şifre ise v dir." & vbCrLf & "Özel işlemler menüsünden değiştirebilirsiniz"
    Open "a:\\sifre1.dat" For Input As #1
   ’Şifre dosyasından okuma yapılır.

    Input #1, password 

    Close #1
    password = Decrypt(password) 
    If password = "33rammerkez1" Then
      Dim lpVolumeNameBuffer As String
      Dim nVolumeNameSize As String
      Dim lpVolumeSerialNumber As Long
      Dim lpMaximumComponentLength As Long
      Dim lpfileSystemFlags As Long
      Dim lpFileSystemNameBuffer As String
      Dim nFileSystemNameSize As Long
      Dim lpSectorsPerCluster As Long
      Dim lpBytesPerSector As Long
      Dim lpNumberOfFreeClusters As Long
      Dim lpTotalNumberOfClusters As Long
      Dim rtval As Long

      lpVolumeNameBuffer = Space(255)
      nVolumeNameSize = 256
      lpFileSystemNameBuffer = Space(255)
      nFileSystemNameSize = 256

      f% = (Dir$("a:\\sifre2.dat") <> "")
      rtval = GetVolumeInformation("c:\\", _
                             lpVolumeNameBuffer, _
                             nVolumeNameSize, _
                             lpVolumeSerialNumber, _
                             lpMaximumComponentLength, _
                             lpfileSystemFlags, _
                             lpFileSystemNameBuffer, _
                             nFileSystemNameSize)
      If f% = 0 Then      

      ’Hdd seri no şifrelenir.

      password = Encrypt(lpVolumeSerialNumber) 

       ’Şifre kaydedilir
       Open "a:\\sifre2.dat" For Output As #1 

       Print #1, password
       Close #1
       Exit Sub
      Else
        Open "a:\\sifre2.dat" For Input As #1
        ’Şifre dosyasında okuma yapılır 

        Input #1, password 

        Close #1

        ’password değişkeninin içeriği şifrelenmiş olan Hdd seri no ile karşılaştırılır
        password = Decrypt(password)
        If password <> lpVolumeSerialNumber Then
          MsgBox "Sabit disk değiştirilmiş. Lütfen firmayla irtibat kurun"
            If vbOK Then
              Unload Me
              End
            End If
        End If
      End If
    Else
      MsgBox "Şifrenin bulunduğu diskete erişilemiyor ya da yanlış şifre" & vbCrLf & "Lütfen firma ile bağlantı kurun"
      If vbOK Then
        Unload Me
        End
      End If
    End If
Else
   ’Buradan itibaren şifre doğru olduğunda çalışması gereken normal program satırları

........

End if

 

hata:
    Select Case Err
        Case 53: MsgBox "Şifrenin bulunduğu diskete erişilemiyor ya da yanlış şifre" & vbCrLf & "Lütfen firma ile bağlantı kurun"
        Case 75: MsgBox "Şifrenin bulunduğu diskete erişilemiyor ya da yanlış şifre" & vbCrLf & "Lütfen firma ile bağlantı kurun"
        Case 76: MsgBox "Şifrenin bulunduğu diskete erişilemiyor ya da yanlış şifre" & vbCrLf & "Lütfen firma ile bağlantı kurun"
        Unload Me
        End
    End Select

Private Sub Form_Unload(Cancel As Integer)
   SaveSetting "Kres", "Ayarlar", "Son Giriş", Date
   SaveSetting "Kres", "Ayarlar", "tekrar", ts + 1
End Sub

 

’şifreleme ve şifre çözme alt programları

Public Function Encrypt(ByVal Plain As String)
Dim i
    Dim Letter As String
    For i = 1 To Len(Plain)
        Letter = Mid$(Plain, i, 1)
        Mid$(Plain, i, 1) = Chr(Asc(Letter) + 99) 

    Next i
    Encrypt = Plain
End Function
Public Function Decrypt(ByVal Encrypted As String)
Dim i
Dim Letter As String
    For i = 1 To Len(Encrypted)
        Letter = Mid$(Encrypted, i, 1)
        Mid$(Encrypted, i, 1) = Chr(Asc(Letter) - 99) 

    Next i
    Decrypt = Encrypted
End Function

Etiketler : VB 6
Kategoriler : Visual Basic
Yorumlar : 3 Yorum Yorum Yaz

Arama
  Ara
Takvim
<September 2010>
SMTWTFS
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789
Tag Bulutu