Merhaba.
Bugün sizlere C# ile DLL oluşturmayı, harici DLL modüllerini dahil edip kullanmayı göstereceğim.
Rehberimiz 3 kısımdan oluşuyor;
DLL, uygulama uzantısıdır.
Normalde DLL olmadan programlar çalışabilir. Ancak güncelleme, geliştirme, farklı programlar için tek bir kitaplık kullanarak geliştirme gibi alanlar için iş kolaylaştırıyor.
Bir program üzerinde güncelleme yapmak için derlemek gerekiyor. Ancak DLL dosyası düzenlenip derlemesi her zaman daha hızlı ve kolay. Değiştirilen DLL dosyasını programın kullandığı dll dosyası ile değiştirerek kolay bir şekilde güncelleme yapabiliyoruz.
Şimdi geçelim DLL oluşturmaya;
Visual Studio 2022 veya diğer Visual Studio programlarını açıp Sınıf Kitaplığı (.NET Framework) oluşturuyoruz.
Ben bu şekilde isimlendiriyorum.
Ek olarak alt yapı kısmını .NET Framework 4.8 olarak belirledim. Siz daha düşük sürümler veya .NET 4.8.1 sürümünü kullanabilirsiniz.
Evet, DLL dosyamızın yapısı oluştu.
Burada önemli olan bazı kısımlar var.
Şimdi küçük bir matematik işlemleri yazalım.
Gördüğünüz üzere 4 işlem yapan bir Class oluşturduk.
Şimdi bunu derlememiz lazım.
Burada dikkat edilmesi gereken kurallar var.
Derleme yaptığın anda şöyle bir hata alacaksınız.
Bu hatanın nedeni, DLL dosyaları tek başına çalışabilen yazılımlar olmadığı için. Bu DLL dosyasının çalışabilmesi için bir
Tamam diyoruz.
Gördüğünüz üzere DLL dosyamız oluştu.
Şimdi bir Form uygulaması oluşturuyorum. Siz WPF veya UWP olarak kullanabilirsiniz.
Burada dikkat edilmesi gereken bazı durumlar var.
Form oluştu.
Şimdi dikkat etmeniz gerek durumlar var. Ben DLL dosyasını x64 olarak derledim. O yüzden programı x64 mimari olarak ayarlamam lazım. Yoksa hata verir.
Ardından Form'u bir defa yorumluyoruz.
Ardından oluşturduğumuz DLL dosyasını programın
Ardından sağ kısımdan, programın işleme ayarlarını yaptığımız kısımdan Başvurular > Başvuru Ekle diyoruz.
Ardından sağ alt kısımda yer alan Gözat tuşuna basıyoruz.
Oluşturduğumuz DLL dosyasını seçiyoruz ve ekle diyoruz.
Bu ekran gelecek tekrar. Tamam tuşuna basıyoruz.
Gördüğünüz üzere DLL dosyamız program çalışmak için eklendi.
Form'un tasarımı bu şekilde.
Şimdi uygulama kısmına geçelim.
Kodumuzun üst kısmına gerekli DLL dosyasını kullanacağımızı belirtiyoruz.
Global alana DLL dosyamızı kullanmak için bir metota atıyoruz.
Not: Burada yazan Process metodu Threading kütüphanesi içerisindeki olan Process değil. DLL dosyamızın içerisinde oluşturduğumuz Class ismi bu.
Gördüğünüz üzere kodlarmız bu şekilde.
İlgili DLL dosyası içerisinde
Gördüğünüz üzere program TextBox'lar üzerinden aldığı değerleri DLL dosyasına ileterek DLL dosyası işlemleri yapıp geri dönüş sağladı. Ardından Label'e yazdırdık.
Şimdi sıra geldi harici bir DLL kullanmaya.
Benim 2 ekranım var.
Şimdi bu ekranların yenileme hızlarını
Burada gördüğünüz kod monitör hakkında birçok bilgiyi çekmemize yaran bir algoritma.
Form'umuzun tasarımını bu şekilde değiştirdim.
Buton kodlarımız bu şekilde;
Gördüğünüz üzere her 2 monitörümün yenileme hızını gösteriyor.
Not: Harici DLL modülleri içerisinde sınıfları kullanmayı öğrenmek tecrübe ve deneyim işidir. Zamanla kullanmayı öğrenirsiniz.
Evet, buraya kadar okuyan herkese teşekkür ederim.
Yazılım rehberlerimin devamı gelecek.
Aklınıza takılan soru olursa her zaman sorabilirsiniz.
İyi çalışmalar, kolay gelsin
Bugün sizlere C# ile DLL oluşturmayı, harici DLL modüllerini dahil edip kullanmayı göstereceğim.
Rehberimiz 3 kısımdan oluşuyor;
- DLL oluşturma.
- Oluşturulan DLL'i kullanma.
- Harici DLL modülü dahil etme ve kullanma.
DLL, uygulama uzantısıdır.
*.exe
dosyaları kendi içinde barındırmadığı kodları DLL içerisinden çeker.Normalde DLL olmadan programlar çalışabilir. Ancak güncelleme, geliştirme, farklı programlar için tek bir kitaplık kullanarak geliştirme gibi alanlar için iş kolaylaştırıyor.
Bir program üzerinde güncelleme yapmak için derlemek gerekiyor. Ancak DLL dosyası düzenlenip derlemesi her zaman daha hızlı ve kolay. Değiştirilen DLL dosyasını programın kullandığı dll dosyası ile değiştirerek kolay bir şekilde güncelleme yapabiliyoruz.
Şimdi geçelim DLL oluşturmaya;
Visual Studio 2022 veya diğer Visual Studio programlarını açıp Sınıf Kitaplığı (.NET Framework) oluşturuyoruz.
Ben bu şekilde isimlendiriyorum.
Ek olarak alt yapı kısmını .NET Framework 4.8 olarak belirledim. Siz daha düşük sürümler veya .NET 4.8.1 sürümünü kullanabilirsiniz.
Evet, DLL dosyamızın yapısı oluştu.
Burada önemli olan bazı kısımlar var.
- Programın Class'ını Public yapmazsanız diğer programlardan erişemezsiniz.
Şimdi küçük bir matematik işlemleri yazalım.
Gördüğünüz üzere 4 işlem yapan bir Class oluşturduk.
C#:
public class Process
{
public double Topla(double a, double b)
{
return a + b;
}
public double Bol(double a, double b)
{
return a / b;
}
public double Carp(double a, double b)
{
return a * b;
}
public double Cikar(double a, double b)
{
return a - b;
}
}
Şimdi bunu derlememiz lazım.
Burada dikkat edilmesi gereken kurallar var.
- Kullanacağınız DLL dosyası eğer x64 mimari gerektiren bir program içerisinde kullanılacaksa x64 olarak derlemeniz lazım.
- Eğer x86 bir yazılımsa x86 olarak derlemeniz gerekir.
- Derleme modunu Debug olarak kullanabilirsiniz. Ancak programı başka insanların kullanması için yayınlayacaksanız eğer Release olarak derlemenizi öneririm.
Derleme yaptığın anda şöyle bir hata alacaksınız.
Bu hatanın nedeni, DLL dosyaları tek başına çalışabilen yazılımlar olmadığı için. Bu DLL dosyasının çalışabilmesi için bir
*.exe
dosyası lazım.Tamam diyoruz.
Gördüğünüz üzere DLL dosyamız oluştu.
Şimdi bir Form uygulaması oluşturuyorum. Siz WPF veya UWP olarak kullanabilirsiniz.
Burada dikkat edilmesi gereken bazı durumlar var.
- DLL dosyasını hangi .NET Framework sürümü ile derlediyseniz aynısı veya daha üstü bir sürüm olmalı program. Yoksa hata verebilir.
Form oluştu.
Şimdi dikkat etmeniz gerek durumlar var. Ben DLL dosyasını x64 olarak derledim. O yüzden programı x64 mimari olarak ayarlamam lazım. Yoksa hata verir.
Ardından Form'u bir defa yorumluyoruz.
Ardından oluşturduğumuz DLL dosyasını programın
*.exe
dosyasının oluştuğu dizine kopyalıyoruz.Ardından sağ kısımdan, programın işleme ayarlarını yaptığımız kısımdan Başvurular > Başvuru Ekle diyoruz.
Ardından sağ alt kısımda yer alan Gözat tuşuna basıyoruz.
Oluşturduğumuz DLL dosyasını seçiyoruz ve ekle diyoruz.
Bu ekran gelecek tekrar. Tamam tuşuna basıyoruz.
Gördüğünüz üzere DLL dosyamız program çalışmak için eklendi.
Form'un tasarımı bu şekilde.
- 2 adet TextBox.
- 1 adet ButTon.
- 1 adet Label.
Şimdi uygulama kısmına geçelim.
Kodumuzun üst kısmına gerekli DLL dosyasını kullanacağımızı belirtiyoruz.
C#:
using Technopat_Test_DLL;
Global alana DLL dosyamızı kullanmak için bir metota atıyoruz.
Not: Burada yazan Process metodu Threading kütüphanesi içerisindeki olan Process değil. DLL dosyamızın içerisinde oluşturduğumuz Class ismi bu.
- Mümkünse kitaplık ile aynı isim olan Class isimleri koymayın. Yoksa çakışma hatası alabilir, ekstra kod yazmanız gerekebilir.
C#:
Process dll_islem = new Process();
Gördüğünüz üzere kodlarmız bu şekilde.
İlgili DLL dosyası içerisinde
Topla()
metotunu çağırıyoruz.
C#:
private void button1_Click(object sender, EventArgs e){
double sayi1 = Convert.ToDouble(textBox1.Text);
double sayi2 = Convert.ToDouble(textBox2.Text);
label1.Text = dll_islem.Topla(sayi1, sayi2).ToString();
}
Gördüğünüz üzere program TextBox'lar üzerinden aldığı değerleri DLL dosyasına ileterek DLL dosyası işlemleri yapıp geri dönüş sağladı. Ardından Label'e yazdırdık.
Şimdi sıra geldi harici bir DLL kullanmaya.
Benim 2 ekranım var.
Şimdi bu ekranların yenileme hızlarını
user32.dll
ile çekelim.
C#:
// ======================================================================================================
// SCREEN API
const int ENUM_CURRENT_SETTINGS = -1;
[DllImport("user32.dll")]
static extern bool EnumDisplaySettings(string lpszDeviceName, int iModeNum, ref DEVMODE lpDevMode);
[StructLayout(LayoutKind.Sequential)]
public struct DEVMODE
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
public string dmDeviceName;
public short dmSpecVersion;
public short dmDriverVersion;
public short dmSize;
public short dmDriverExtra;
public int dmFields;
public int dmPositionX;
public int dmPositionY;
public ScreenOrientation dmDisplayOrientation;
public int dmDisplayFixedOutput;
public short dmColor;
public short dmDuplex;
public short dmYResolution;
public short dmTTOption;
public short dmCollate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
public string dmFormName;
public short dmLogPixels;
public int dmBitsPerPel;
public int dmPelsWidth;
public int dmPelsHeight;
public int dmDisplayFlags;
public int dmDisplayFrequency;
public int dmICMMethod;
public int dmICMIntent;
public int dmMediaType;
public int dmDitherType;
public int dmReserved1;
public int dmReserved2;
public int dmPanningWidth;
public int dmPanningHeight;
}
// ======================================================================================================
Burada gördüğünüz kod monitör hakkında birçok bilgiyi çekmemize yaran bir algoritma.
Form'umuzun tasarımını bu şekilde değiştirdim.
- 1 adet ListBox.
- 1 adet Button.
Buton kodlarımız bu şekilde;
C#:
private void button1_Click(object sender, EventArgs e)
{
try
{
foreach (Screen screen in Screen.AllScreens)
{
// SCREEN REFRESH RATE
var dm = new DEVMODE { dmSize = (short)Marshal.SizeOf(typeof(DEVMODE)) };
EnumDisplaySettings(screen.DeviceName, ENUM_CURRENT_SETTINGS, ref dm);
listBox1.Items.Add(dm.dmDisplayFrequency.ToString() + " Hz");
}
}
catch (Exception) { }
}
Gördüğünüz üzere her 2 monitörümün yenileme hızını gösteriyor.
Not: Harici DLL modülleri içerisinde sınıfları kullanmayı öğrenmek tecrübe ve deneyim işidir. Zamanla kullanmayı öğrenirsiniz.
Evet, buraya kadar okuyan herkese teşekkür ederim.
Yazılım rehberlerimin devamı gelecek.
Aklınıza takılan soru olursa her zaman sorabilirsiniz.
İyi çalışmalar, kolay gelsin
Son düzenleme: