Root > Documents > Programlama > Dinamik Derleme | AR-GE Grup
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 button click 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
   
   
Cyber-Warrior TIM All Legal and illegal Rights Reserved.\CWDoktoray 2001©