1- Giriş
Bir önceki yazımda “C# Programlarında Lua Scriptleri Kullanmak – 1” çok temel biçimde Lua’nın C#’dan kullanımı, C#’dan Lua betiğine parametreler gönderme ve Lua betiğinden C# koduna erişimle ilgili örnekler gösterdim. Bu yazımda ise çok daha işe yarar biçimde bir C# Windows Form yazılımının Lua betikleri ile entegre edilip nasıl parametrik/dinamik hale getirilebileceğini göstereceğim.
2- C# Kodları
C# kodumuz aşağıdaki gibidir:
// Lua scriptleme nesnesi oluştur Lua script = new Lua(); // CLR'i Yükleyelim script.LoadCLRPackage(); // Formu Lua'ya belirtelim script["formNesnesi"] = this; // Buton basılınca çağırılacak metodumuzu tanımlayalım MethodInfo testMetodu = this.GetType().GetMethod("_testMetodu", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Instance, null, new Type[] {typeof(int),typeof(int)}, null); // Metodu Lua'ya kaydedelim script.RegisterFunction("testMetodu", this, testMetodu); // Dosyadan Lua scriptini çalıştır script.DoFile("test5.lua");
“LoadCLRPackage()” ile CLR paketini script alt yapısına yüklüyoruz, bu paket .Net framework’üne Lua’nın erişmesi için gerekmektedir.
“MethodInfo” ile başlayan satırda temel olarak C# metodumuzu Lua’ya bağlayabilmek için gereken ön çalışma olan metod göstergecini alma işlemini yapıyoruz. Temel olarak burada “_testMetodu” adında ve 2 adet int tipinde parametresi olan bir metodun göstergeci/pointerı alıyoruz.
Akabinde altındaki satırdaki “RegisterFunction” metoduyla metodumuzu Lua scriptimize ekliyoruz. Bundan sonra aslında bu metodu Lua’dan doğrudan çağırabileceğiz.
Diğer kodlar bir önceki yazıda gördüğümüz kodlar. Methodumuzu da bir yerde tanımlamayı unutmayalım:
private void _testMetodu(int a, int b) { MessageBox.Show("Merhaba! Toplam="+(a+b).ToString()); }
Bu C# metodu ile verilen 2 integer değeri toplayıp MessageBox içerisinde gösteriyoruz.
3- Lua Betiği
Lua betiğimiz aşağıdaki şekildedir, “test5.lua” olarak kaydedelim.
-- Gerekli bileşenleri yükle import("System.Windows.Forms") import("System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") import("System.Drawing") Forms = CLRPackage("System.Windows.Forms", "System.Windows.Forms") Drawing = CLRPackage("System.Drawing", "System.Drawing") -- .Net Nesne Tanımlarını LUA'ya Çekelim Form=Forms.Form Button=Forms.Button TextBox=Forms.TextBox Label=Forms.Label Point=Drawing.Point Size=Drawing.Size -- Button Basıldığında Çağırılacak Fonksiyon function yeniButton_Click(sender,data) -- C# sınıfımızdaki metodu çağıralım testMetodu(3,5) end -- Button oluşturalım yeniButton=Button() yeniButton.Text = "Button Örneği" yeniButton.Location = Point(220, 0) yeniButton.Name = "yeniButton" yeniButton.Size = Size(100, 20) handler=yeniButton.MouseUp:Add(yeniButton_Click) -- Textbox oluşturalım yeniTextBox=TextBox() yeniTextBox.Text = "TextBox Örneği" yeniTextBox.Location = Point(110, 0) yeniTextBox.Name = "yeniTextBox" yeniTextBox.Size = Size(100, 20) -- Label oluşturalım yeniLabel=Label() yeniLabel.Text = "Label Örneği" yeniLabel.Location = Point(0, 0) yeniLabel.Name = "yeniLabel" yeniLabel.Size = Size(100, 20) -- Nesneleri formumuza ekleyelim formNesnesi.Controls:Add(yeniButton) formNesnesi.Controls:Add(yeniTextBox) formNesnesi.Controls:Add(yeniLabel)
Lua betiğinde çok özel bir kod yok, genel olarak standart Lua kodlarından oluşuyor. “formNesnesi” bizim C# kodumuzdan Lua scriptine bildirdiğimiz Form nesnemiz. Lua içerisinden Button/Label/TextBox oluşturup Form nesnemize ekliyoruz. Button nesnemizi oluştururken ek olarak “yeniButton_Click” Lua metodunu fareye tıklama olayına bağlıyoruz. C# kodumuzdan bağladığımız “testMetodu” metodunu da Lua betiğimizden normal bir biçimde çağırıyoruz.
4- Sonuç
Bu yazıda C# ve Lua’yı oldukça yakından entegre etmenin yöntemlerini gördük. Umarım işinize yarar, iyi kodlamalar.
Bir cevap yazın
Yorum yapabilmek için giriş yapmalısınız.