Cyber-Warrior.Org \ Doküman \ Programlama > Dinamik Derleme | AR-GE Grup
Madde
Yazar : macmillan
Date : 21.04.2016 14:58:02
# Dinamik Derleme | AR-GE Grup
1 - Dinamik Derleme | AR-GE Grup
1.1: AÇIKLAMA
Dinamik
derlemenin kaynak kodlari degistirilebilir olup visual studio veya
herhangi bir derleyiciye ihtiyaç olmadan dogrudan program içerisinde derlenebilir hatta eklenti sistemi dâhi olarak kullanabilir.
1.2: GEREKEN ÜST BILGILER
using System.CodeDom.Compiler; //Derleme araçlarini kullanabilmemiz için gerekli. using System.Reflection; //Degiskenlerin methodlarina, özelliklerine vs. erisebilmek için geçerli. using System.Text; //StringBuilder gibi degiskenleri kullanmak için gerekli. using System.Collections.Generic; //Koleksiyon ve ArrayList gibi siniflar için gerekli.
1.3:KULLANILACAK ÖZELLIKLER
CodeDomProvider | Degisken | Compiler Sinifi: CSharp kodlarimizi yazacagimiz degisken. CompilerResults| Degisken | Compiler Sinifi: CSharp kodlarimizi yazmis oldugumuz CodeDomProvider sinifi ile kaynak kodlarini yazmis oldugumuz projeyi derlemek için kullanacagimiz degisken. StringBuilder | Degisken | Text Sinifi: Kolayca CSharp kaynak kodlari yazip CodeDomProvider degiskenine atayacagimiz degisken. ReferencedAssemblies | Koleksiyon | CodeDomProvide Degiskeni: Yazacagimiz dinamik programa referans eklemek için kullanacagimiz koleksiyon. Assembly | Degisken | Reflection Sinifi:CompilerResults ile derlemis veya derleyecek oldugumuz programin kodlarini çalistiracagimiz degisken. CreateInstance| Fonksiyon | Assembly Degiskeni: Derlemi islemi sonucunda Assembly sinifi ile derlemek için almis oldugumuz programin istenilen alan.
1.4: YAZILACAK ÖZELLIKLER
CWCompiler | Sinif: Yazmis oldugumuz kaynak kodu derlemek için kullanacagimiz sinif. CWCompiler.Derle() | Fonksiyon: bool dönüslü dinamik programi derlemek için yazmis oldugumuz kriterleri derlemek için kullanacagimiz fonksiyon. CWCompiler.KodCalistir() | Fonksiyon: Kod derleme islemi yapildiktan sonra dinamil programdaki kodlari çalistirmak için kullanacagimiz fonksiyon.
2 - YAZILIM ISLEMI
2.1: Giris
Öncelikle yeni bir sinif tanimlayalim sinif adi CWCompiler olsun.
2.2: Degikenler
Sinifimiz içerisinde kullanacagimiz degiskenleri tanimliyoruz.
2.3: Derle Fonksiyonu
Kodlarimizi derleyecek fonksiyonu yaziyoruz.
2.4: KodCalistir Fonksiyonu
Derleme isleminden sonra hedef kodu çalistirmak için kullanacagimiz fonksiyonu yaziyoruz. Hedef fonksiyonun degerine göre dönüs yapar, kod çalistirdiktan sonra hata verip vermedigini CWCompiler sinifinin SonCalismaHatali özelligi ile kontrol edilebilir.
3 - DERLEME ISLEMI
3.1: Dogru Derleme
CWCompiler sinifimizi yazdik simdi sira geldi kodlarimizi derlemeye, örnek olarak butona tikladigimizda Cyber-Warrior mesajini ekranda göstersin. Bunun için form’ a buton ekledikten sonra click olayina asagidaki kodlari yaziyoruz. Sonuç asagidaki gibi çikacak
3.2: Yanlis Derleme
Asagidaki kodu girdigimizde resimdeki hatayi verecektir.
3.3: Yazilani Derleme
Bir textbox ekleyelim ve yazdiklarimizi derletelim. CWMain kodu baslangiç fonksiyonu olsun. Textbox ekledikten sonra buttonclick olayi kodlarini bu sekil olarak degistirelim. Ve sonuçlar asagidaki resimler gibi olacaktir.
3.4: Geridönüslü Derleme
2 adet textbox sonucunu birlestirip sonucunu dönen bir fonksiyon yazalim ve sonucunu ekrana yansitalim. 2
adet textbox ekleyelim ve butonumuzun ismini Birlestir olarak
degistirdikten sonra asagidaki kodlari button click olayina yazalim. daha sonra büyük olan textboxa asagidaki kodlari yazip Birlestir butonuna tiklayalim.
4 - ÖRNEK PROJE ve SONUÇ
Görmüs oldugunuz gibi dinamik derleme olayini anlattik, bu ve buna benzer sekilde eklenti sistemide gelistirebilirsiniz. Bu arada KodCalistir fonksiyonu ile çagiracaginiz fonksiyon’ un static olmasina dikkat edin aksi halde hata verecektir. Örnek proje linki; Indir Yandex