| Editor Login | Register | ||
| Root > Bilgisayar > Nesne Programlama |
|
|
| Runtime Compiling Uygulamasi |
|
Scripter Merhaba, sanırım benim aklıma gelen bir çoğumuzunda aklına gelmiştir. Neden yazdığım programlarda script desteği olmasın, yani kullanıcılar kendi yazdıkları kodları programlarımızdan çalıştırabilirler mi. Tıpkı AutoCAD, Excel vs. gibi. .Net birçok konuda olduğu gibi bu iş içinde ihtiyaçlarımıza uygun ve çok faydalı bir namespace barındırıyor; System.CodeDom.Compiler namespace’si. Bu namespace sayesinde yazdığımız bir program çalıştığı sırada kodlarımız çalıştırabilir ve herhangi bir programa dahil edip oradan kullanabiliriz. Bu sayede kaynak kodların bulunduğu bir dosyayı script gibi kendi programlarımızda çalıştırabiliriz Bunun ne faydası olur diyecek olursanız her şeyden önce esneklik derim. Unutulmamalıdırki artık programlama platformları programcıların değil kullanıcıların beklentilerini karşılamak için geliştiriliyor ve paket program kullanıcıları artık daha esnek programlar istiyorlar. Tıpkı Excel gibi bir makro yazıp bunu bir program gibi çalıştırabilirsiniz ya da AutoCAD’ de AutoLISP kullanarak kendi maliyet hesaplarınızı çıkartacak diyalog pencereleri, hesap fonksiyonları yazabilirsiniz. Böyle düşünecek olursak kendi programlarımızda da buna ihtiyaç duyduğumuz anlar olacaktır.
Bu kadar laftan sonra artık kodlamaya başlayalım. Örnek olarak bir VB.Net derleyicisi yazalım.
Resimdeki gibi bir form oluşturuyoruz,
· ComboBox1 · Button1 · Button2 · RichTextBox1 · ListView1
Kullanılacak Namespaceleri projemize dâhil ediyoruz
C#.Net
VB.Net
ComboBox’ı derleme seçenekleri ile dolduruyoruz
C#.Net
VB.Net
Button1’in (Çalıştır Butonu) click olayına yazılacak kodlar: der isimli ICodeCompiler tipinde bir değişken tanımlıyoruz bu değişken bizim derlemek istediğimiz kodlar için arabirim olacak ve der üzerinde vb kodlarını çalıştırabilecek bir derleyici oluşturuyoruz. VBCodeProvider kısmına dilersek CSharpCodeProvider yazarak, derleyicimizin C# kodlarını çalıştırmasını sağlayabiliriz,
C#.Net
VB.Net
Derleyicimizin ihtiyaç duyduğu bazı parametreler olacak, derleme konumu, referans alınacak kaynaklar (Namespaceler) vs. gibi
C#.Net
VB.Net
Combobox’ta seçtiğimiz seçeneğe göre derleme konumunu ve parametreler belirtiliyoruz.
C#.Net
VB.Net
Sıra geldi derlemeyi oluşturmaya. Bunu için derleyicimizin kaynak koddan derleme fonksiyonunu kullanacağız. Bu fonksiyon geriye bir sınıf döndürmektedir. Bu sınıf içinde, derleme sonuçlarıyla ve derlememizle ilgili bilgiler bulunmaktadır. Derlenen kodu çalıştırdığımız zaman bu bilgilere ihtiyacımız olacak o yüzden sonuçları CompilerResults tipindeki res isimli bir değişkende tutacağız. Ayrıca fonksiyona kaynak kodu string olarak göndereceğiz bunun içinde kod isimli değişkeni kullanacağız. Kod değişkeni değerini RichTextBox1’den yani kodlarımızı yazdığımız yerden alacak. Ayrıca fonksiyonumuz derleme anında ihtiyaç duyacağı parametreleride par isimli değişkenimize girdiğimiz değerlerden alacak
C#.Net
VB.Net
Derleme sonuçlarına bakarak derleme sırasında hata olup olmadığına bakabilir eğer oluşmuşsa oluşan hataları öğrenebiliriz. Bunu için bir listview kullanacağız. res.Errors.HassErrors parametresi hata oluştuğunda true değerini alıyor. Hatalar Errors[x] ile sırayla çekeceğiz.
C#.Net
VB.Net
Şimdide belirlediğimiz parametreler göre RAM’da veya bir Dosyaya yazarak derlediğimiz dosyadan bir Instance oluşturacağız, burada belirtmemiz gereken değer derlenen kodların Namespaces’i ve çalıştırmak istediğimiz Class. Yine bu fonksiyon geriye object tipte bir değer döndürecektir, bu değer eğer boşsa belirtilen Class bulunamamış demektir. Bunu kontrol ederek hata oluşmasını engelleyebiliriz.
C#.Net
VB.Net
InvokeMebmer metoduyla kodumuzu çalıştıracağız ama bundan önce invokMember metoduna ait parametreleri biraz açıklayayım:
String name : Çağrılacak method, özellik, veya Classa ait bir nesne adı BindingFlags invokeAttr : Belirtiğimiz ismin çağrılma yöntemi Object target : Çağrılan metodun bulunduğu nesne Object[] args : Çağrılan fonksiyona gönderilecek parametreler
C#.Net
VB.Net
Son olarak text dosyalarına yazdığımız kodları açmak için gerekli kodları yazalım
Aç… Butonu
C#.Net
VB.Net
|
|
| Bağlantılar: bilgininefendisi.net |
| Open Source Document Project | AUP&TOS |