Dll nedir?


90

Bu çok basit bir soru olabilir, ancak günümüzün web uygulaması geliştirme dünyasında birçok programcının dll'lerle fazla uğraşmasına gerek yoktur ve bu nedenle amaçlarını öğrenmek için zahmete girmez.

Peki dll nedir?

  1. Ne için kullanılır?
  2. O nasıl çalışır?
  3. Nasıl yaratırsınız?
  4. Hangi durumlarda uygun bir tane yaratmak?

Bana dll'lerin işlev kitaplıklarını depolamak için kullanıldığı söylendi, ancak bunun ötesinde pek bir şey bilmiyorum. Umarım buradaki biri beni aydınlatabilir, böylece Windows dizinimdeki tüm o .dll dosyalarının ne yaptığını merak etmeyi bırakabilirim.


Sorunuzun gerçek yanıtlarının olmadığı durumlarda topluluk wiki kullanılmalıdır. Bu geçerli bir sorudur ve topluluk wiki modunu seçerek, kendinizin ve yanıtlayanların bu soruda itibar kazanmasını engellersiniz.
Serafina Brocious

bu soru çok popüler olma potansiyeline sahip
Tamas Czinege

1
Sence? Belki görüş için ama oylama olasılığı yok ... Zaten 4 kez cevaplandı.
Omar Kooheji

2
bu önemsiz derecede googleable ...
annakata

3
Evet, bu googleable, ancak bunun hakkında pek çok iyi özlü açıklama bulamadım, özellikle de bir tane yaratma sorusu ve birini kullanmanın uygun olduğu zaman.
Daniel

Yanıtlar:


55

DLL, dinamik bağlantı kitaplığıdır. Birkaç uygulama (veya diğer kitaplıklar / modüller) tarafından kullanılabilen bir kod ve / veya veri koleksiyonudur.

Bu nedenle, örneğin dosyaları işlemek, GUI bileşenleriyle çalışmak vb. İçin yaygın yöntemler kitaplıklarda kullanıma sunulur, böylece birçok uygulama aynı işlevi kullanabilir. Bu sadece aynı malzemeyi birden çok kez oluşturma ihtiyacını azaltmakla kalmaz, aynı zamanda örneğin uygulamalar arasında ortak diyalogların aynı olmasını sağlar.

Kitaplıklar çalışma zamanında yüklenebilir ve böylece farklı eşzamanlı uygulamalar arasında paylaşılabilir. Buna dinamik bağlama denir.

Bazı durumlarda, kütüphane uygulamanın kendisine dahil edilebilir. Bu, statik bağlantı olarak bilinir. Statik bağlantı, esneklik pahasına dağıtımı kolaylaştırır çünkü farklı uygulamaların her biri DLL'nin aynı kopyasını yükler.

Ancak statik bağlama her zaman bir seçenek değildir. Örneğin, bir .NET uygulamasını statik olarak bağlayamazsınız. Bir .NET uygulamasını çalıştırmak için kullanıcının .NET kitaplıklarına sahip olması gerekir ve kitaplıklar (veya .NET'te çağrıldıkları haliyle derlemeler) çalışma zamanında yüklenir.

DLL'ler, uygulamaları oluşturmak için kullanılan aynı araçlar tarafından oluşturulur. Spesifik ayrıntılar, kullanılan aletlere büyük ölçüde bağlıdır.


Cevap için teşekkürler, merak ettiğim bir şey, uygulamaların dll'de hangi işlevlerin mevcut olduğunu nasıl bildiğidir? Dll'nin kendisi tüm makine kodudur değil mi? Peki dll'deki genel işlev imzaları nasıl ortaya çıkar?
Daniel

Çoğu dil hakkında bilgim yok, ancak Visual Studio'nun otomatik tamamlama özelliği size mevcut tüm işlevleri gösterecek.
Grant

1
Ancak otomatik tamamlama, dll'nin yalnızca makine kodu olması durumunda mevcut işlevlerin ne olduğunu nasıl öğrenir?
Daniel

2
Makineler makine kodunu okuyabilir. DLL'ler simgeler, dizeler, yazı tipleri içerebilir. Ne yazık ki orada bir yerde ne içerdiğinin bir listesi var.
Grant

1
Visual C ++, dumpbin adında bir araç içerir - "dumpbin / export her.dll" komutunun çalıştırılması, size hangi işlevlerin ve malzemelerin aktarıldığını söyleyecektir (yani, DLL'yi yükleyen programlar tarafından kullanılabilir).
Graeme Perrow

29

DLL = Dinamik Bağlantı Kitaplığı

İsim aslında başardıkları şeyi oldukça açıklıyor.

Kütüphane

Belirli bir sorun etki alanı için kodu tek bir konuma ayırmanıza olanak tanır. Ardından bunu birden fazla uygulama arasında paylaşın. Kütüphane, hataları düzeltmek veya işlevsellik eklemek için herhangi bir zamanda başka bir kütüphaneyle değiştirilebilir.

Bağlantı

Kitaplıktaki mantığın doğrudan uygulamaya derlenmemesi için kitaplığı bir uygulamaya "Bağlayabilirsiniz".

Dinamik

Kitaplık isteğe bağlı olarak yüklenebilir. Belleğe devasa bir tek EXE yüklemek yerine, işletim sistemi yalnızca gereken bölümleri yükleyebilir. Ayrıca, uygulamalar arasında bir DLL paylaşılıyorsa, işletim sistemi kitaplığın nasıl yükleneceğini optimize edebilir ve uygulamalar arasında paylaşabilir.


10

DLL (dinamik bağlantı kitaplığı) dosyaları, daha büyük bir programın iyi çalışmasına yardımcı olacak küçük "alt programlar" olarak tanımlanabilir. Çeşitli donanım ve yazılım kaynaklarını (çalışma zamanı oturumlarının çeşitli noktalarında) temel aldıkları ana çalıştırılabilir programa "ihtiyaç duyulduğunda" esasına göre bağlamaya yönelik bir araç sağlarlar. Bu, program ilk çalıştırıldığında ana yürütülebilir programla ilgili her şeyi bilgisayarın RAM'ına (rastgele erişim belleği) yükleme ihtiyacını ortadan kaldırır.

DLL'ler tarafından taşınan yazılım kaynakları, programı çalışır durumda tutmak için gerçekten gerekli olmayan çeşitli program işlevlerinin kodunu içerir: yani, belirli bir bilgi işlem oturumu sırasında yalnızca belirli zamanlarda çağrılması gereken ve aslında ihtiyaç duyulmayabilen işlevler hiç aranacak. Program ilk çalıştırıldığında bu işlevleri (ve belirli bir program için önemli sayıda olabilir) bilgisayarın RAM'ına yüklemek ve ardından oturum boyunca onları orada tutmak, RAM alanı israfı olacaktır - ki bu, ayrıcalıklı.

Büyük bir gelişme:

DLL'lerin geliştirilmesi, hesaplamada büyük bir ilerlemeydi, çünkü bunlar mevcut olmadan önce, bir programla yapılacak her şeyin (nadiren kullanılan işlevler dahil) program ilk yüklendiğinde RAM'e yüklenmesi gerekiyordu. Bu, çeşitli programlar tarafından sergilenen daha yavaş hızlarla son derece verimsiz hesaplamaya yol açtı. Aynı zamanda, RAM üzerindeki görevli gerginlik nedeniyle birkaç basit programı çalıştırarak çoklu görev yapmak son derece zordu.

Hususlar:

DLL'ler genellikle sürüme özgüdür. Bir programın 1. Sürümü (veya duruma göre bir programlama dili) için iyi çalışanlar, Sürüm 2 ile iyi çalışmayabilir. Genel kural, eski sürümdeki DLL'lerin çalışamama eğiliminde olmasıdır. yeni sürümle iyi, ancak daha yeni sürümdekiler genellikle programın veya programlama dilinin eski sürümüyle oldukça iyi çalışabilir.


7

Dinamik Bağlantılı Kitaplık.

Size bir örnek vermek gerekirse, uygulamanıza başka birinin DLL'si yüklüyse, ondan programlama bitlerini kullanabilirsiniz.

Her zaman "5" ile başlayan rastgele sayılar üreten bir DLL yükleyebilirsiniz.

Programınızda CrazyDLL.GenerateRandomNumbersSorta () 'yı çağırabilir ve numarayı döndürecektir.

Gerçek bir dünya örneği için, 4 metin kutusunu birleştiren DLL'm var (bunları IP adreslerini yazmak için kullanırsınız) ve otomatik olarak yalnızca 256'dan küçük sayıları kabul eder ve önceki bir metin kutusuna atlamak için geri al tuşuna basmayı yönetir.

Bu kodla bir DLL oluşturdum ve şimdi tek yapmam gereken, tüm bu kodu tekrar tekrar kopyalamak zorunda kalmadan bu IP adresi metin kutusu koleksiyonlarından daha fazlasını sürükleyip bırakmak.

Aynı DLL, IP adreslerini onaltılık dizelere ve diğer kullanışlı koda dönüştürme işlevine de sahiptir.



1

DLL = Dinamik Yük Bağlantı Kitaplığı. Size söylendiği gibi, temelde bir fonksiyonlar, C ++ sınıfları ve / veya global değişkenler koleksiyonudur. DLL'yi statik olarak (yani işletim sistemi programınız başladığında otomatik olarak yükler) veya dinamik olarak (programınız onu açıkça yükler) yükleyebilirsiniz, bu noktada DLL içindeki işlevler ve şeyler programınız tarafından kullanılabilir.

Bir tane oluşturmak, bir main()işlevin olması gerekmemesi dışında, bir EXE oluşturmaya benzer . Bağlayıcıya EXE yerine DLL oluşturmasını söyleyen bağlayıcı yönergeler vardır.

Bunu yapmak istemenizin ana nedeni, bazı kodları tek bir yerde kapsüllemek ve kodu her birine bağlamak yerine birden çok exe'den kullanmaktır.

Biraz tarihsel bir neden, kodun bir kısmı fiziksel olarak farklı bir dosyada bulunduğundan exe'nizin daha küçük olabilmesidir. Bu, exe'niz tarafından bellekte kaplanan alanın daha küçük olabileceği anlamına gelir. Modern sistemlerde, bu, Windows Mobile'da hala bir sorun olsa da, eskisinden daha az sorun teşkil etmektedir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.