Makale Özeti

Bu makalede VB.NET ile kaynak kullanımı anlatılmıştır

Makale

Kaynak (Resource Kullanımı) -1

Kaynaklar (resource); uygulama ile birlikte dağıtılan, farklı format ve yapılara sahip, çalıştırılamayan veriler, biçiminde tanımlanmaktadır. Bu anlamda bitmap, ikon, string gibi görsel unsurlar, birer kaynak örneği olabilmektedir. Kaynak kullanımının marjinal faydası; kaynak dosyası içerisinde saklanan verilerin değiştirilmesi durumunda, söz konusu kaynağı kullanmakta olan uygulamanın yeniden derlenmesi ve buna bağlı dağıtım gibi ikincil komplikasyon’ların önlenebilmesidir.

.NET uygulamalarına ilişkin “.resx” uzantılı dosyalar, XML formatındaki tekst dosyalardır ve uygulamaya ilişkin kaynakları “anahtar-değer” çiftleri şeklinde saklarlar. Bu tür dosyaların yaratılması noktasında ResXResourceWriter isimli sınıfa ait üyeler kullanılmaktadır. Sınıfın başlangıç fonksiyonu (constructor), yaratılmak istenen dosyanın path bilgisini parametre olarak almaktadır.

Örnek : Aşağıdaki uygulamada Capa.jpg isimli dosya ve bir string içeren “Capa.resx” isimli kaynak dosyasının yaratılışı örneklenmektedir.

Dim r as New ResXResourceWriter("C:\Capa.resx")
Dim i As New Bitmap("C:\Capa.jpg")
r.AddResource("Capa", i)
r.AddResource("Anchor", "Capa")
r.Generate() r.Close()

AddResource() metodu; parametrelerine “anahtar-değer” çiftleri şeklinde geçilen verileri, ilgili kaynağa eklemekten sorumludur. Generate() metodu ise, AddResource() ile eklenen verileri “.resx” uzantılı dosya içerisine yazar. Ancak bu metot, üzerinde çalışılan kaynak dosyasını otomatik olarak kapatamadığı için, dosyanın Close() metodu ile programcı tarafından kapatılması gerekir.

.RESX Uzantılı Bir Dosyanın Programatik Olarak Okunması

.Resx uzantılı dosyalar, kaynaklara ilişkin bilgileri “anahtar-değer” çiftleri şeklinde taşıdıkları için, bu dosyaların programatik olarak okunması noktasında IDictionaryEnumerator arayüzünden faydalanılabilir. Keza ResXResourceReader sınıfı, bu arayüze ilişkin referans değeri döndüren, GetEnumerator() fonksiyonuna sahiptir.

Dim r As New ResXResourceReader("C:\Capa.resx")
Dim i As IDictionaryEnumerator
i = r.GetEnumerator()
Do While (i.MoveNext())
    MsgBox("Anahtar:" & i.Key & "Değer:" & i.Value)
Loop
r.Close()

XML Formatındaki Kaynak Dosyalarını Binary Formata Dönüştürmek

“.resx” uzantılı ve XML formatındaki kaynak dosyalarının, binary format’taki eşleniklerinin elde edilmesi amacı ile resgen.exe isimli araç kullanılabilir. Bu araca komut satırından geçilecek birinci parametre; .resx uzantılı dosya olurken, ikinci parametre; .resources uzantılı ve yaratılmak istenen binary dosya olmalıdır.

Aşağıdaki şekilde ise, yaratılan yeni kaynak dosyasının, hex editördeki görünümü izlenmektedir.

Bir Assembly‘e Kaynak Dosyasının Bind Edilişi

Bu işlem vbc.exe ya da csc.exe isimli komut satırından çalıştırılan derleyiciler kullanılarak yapılabilir. Örneğin :

vbc.exe /res:C:\Capa.resources /r:System.Drawing.dll
/r:System.Windows.Forms.dll /r:System.dll C:\Form1.vb

Binding işleminin ardından kaynağa ilişkin veriler, derleyici tarafından assembly manifest içerisine özel bir formata bağlı kalınarak konumlandırılacaktır. 


Aykut TAŞDELEN

MVP (Most Valuable Professional)

aykuttasdelen@yazgelistir.com