Delphi ile Statik ve Dinamik DLL Yükleme

click fraud protection

Bir DLL (Dinamik Bağlantı Kütüphanesi), çok sayıda uygulama ve diğer DLL'ler tarafından çağrılabilen paylaşılan bir işlev kütüphanesi olarak işlev görür. Delphi sağlar DLL oluşturma ve kullanma böylece bu işlevleri istediğiniz zaman çağırabilirsiniz. Ancak, bu rutinleri arayabilmeniz için içe aktarmanız gerekir.

Bir DLL'den dışa aktarılan işlevler, harici bir yordam veya işlev (statik) bildirilerek veya DLL'ye özgü API işlevlerine (dinamik) doğrudan çağrı yapılarak iki şekilde alınabilir.

Basit bir DLL düşünelim. Aşağıda verilen daire yarıçapını kullanarak bir dairenin alanını hesaplayan "CircleArea" adlı bir işlevi dışa aktaran "circle.dll" kodu:

Circle.dll dosyasına sahip olduğunuzda, uygulamanızdan dışa aktarılan "CircleArea" işlevini kullanabilirsiniz.

Statik Yükleme

Bir yordamı veya işlevi almanın en basit yolu harici yönerge kullanarak bildirmektir:

Bu bildirimi birimin arabirim bölümüne eklerseniz, program başladığında circle.dll bir kez yüklenir. Programın yürütülmesi boyunca, CircleArea işlevi, yukarıdaki bildirimin olduğu birimi kullanan tüm birimler tarafından kullanılabilir.

instagram viewer

Dinamik Yükleme

Win32 API'lerine doğrudan çağrılar yoluyla bir kitaplıktaki yordamlara erişebilirsiniz. LoadLibrary'ı, FreeLibrary, ve GetProcAddress. Bu işlevler Windows.pas dosyasında bildirilmiştir.

CircleArea işlevini dinamik yüklemeyi kullanarak nasıl çağıracağınız aşağıda açıklanmıştır:

Dinamik yükleme kullanarak içe aktarırken, DLL LoadLibrary çağrısına kadar yüklenmez. Kütüphane, FreeLibrary'i arayın.

Statik yükleme ile, DLL yüklenir ve başlatma bölümleri çağıran uygulamanın başlatma bölümleri yürütülmeden önce yürütülür. Bu dinamik yükleme ile tersine çevrilir.

Statik mi Dinamik mi Kullanmalısınız?

İşte statik ve dinamik DLL yüklemesinin avantaj ve dezavantajlarına basit bir bakış:

Statik Yükleme

Artıları:

  • Yeni başlayan bir geliştirici için daha kolay; "çirkin" yok API çağrıları.
  • DLL'ler program başladığında yalnızca bir kez yüklenir.

Eksileri:

  • Herhangi bir DLL eksikse veya bulunamazsa uygulama başlamaz. Bunun gibi bir hata mesajı görünecektir: "'Missing.dll' bulunamadığı için bu uygulama başlatılamadı. Uygulamayı yeniden yüklemek bu problemi çözebilir". Tasarım gereği, statik bağlantı ile DLL arama sırası uygulamanın hangi dizini içerir yüklendiğinde, sistem dizini, Windows dizini ve PATH ortamında listelenen dizinler değişken. Arama sırasının çeşitli Windows sürümleri için farklı olabileceğini de unutmayın. Her zaman çağıran uygulamanın bulunduğu dizinde tüm DLL'lerin olmasını bekleyin.
  • Bazı DLL işlevlerini kullanmasanız bile tüm DLL'ler yüklendiğinden daha fazla bellek kullanılır

Dinamik Yükleme

Artıları:

  • Kullandığı bazı kütüphaneler olmasa bile programınızı çalıştırabilirsiniz.
  • DLL dosyaları yalnızca gerektiğinde kullanıldığından daha az bellek tüketimi.
  • DLL dosyasının tam yolunu belirleyebilirsiniz.
  • Modüler uygulamalar için kullanılabilir. Uygulama yalnızca kullanıcı için "onaylanmış" modülleri (DLL) ortaya koyar (yükler).
  • Kütüphaneyi dinamik olarak yükleme ve boşaltma yeteneği, bir geliştiricinin programlara ekstra işlevsellik eklemesine izin veren bir eklenti sisteminin temelidir.
  • Sistem DLL'lerinin aynı işlevleri desteklemeyebileceği veya aynı şekilde desteklenmeyebileceği eski Windows sürümleriyle geriye dönük uyumluluk. Önce Windows sürümünü tespit ettikten sonra uygulamanızın çalıştığına göre dinamik olarak bağlantı kurarak daha fazlasını desteklemenizi sağlar Windows sürümlerini indirin ve eski işletim sistemleri için geçici çözümler (veya en azından, yapamayacağınız özellikleri zarif bir şekilde devre dışı bırakma) destek.)

Eksileri:

  • Yeni başlayan bir geliştirici için her zaman kolay olmayan daha fazla kod gerektirir.
instagram story viewer