DLL dosyaları tam olarak nasıl çalışır? Çok fazla var gibi görünüyor, ama ne olduklarını veya nasıl çalıştıklarını bilmiyorum.
Peki, onlarla olan anlaşma nedir?
DLL dosyaları tam olarak nasıl çalışır? Çok fazla var gibi görünüyor, ama ne olduklarını veya nasıl çalıştıklarını bilmiyorum.
Peki, onlarla olan anlaşma nedir?
Yanıtlar:
DLL nedir?
Dinamik Bağlantı Kitaplıkları (DLL) EXE'ler gibidir ancak doğrudan çalıştırılamazlar. Linux / Unix'teki .so dosyalarına benzerler. Yani DLL'ler MS'in paylaşılan kütüphaneleri uygulamasıdır.
DLL'ler bir EXE'e çok benzer, dosya formatının kendisi aynıdır. Hem EXE hem de DLL dosyaları, Taşınabilir Yürütülebilir (PE) dosya biçimini temel alır. DLL dosyaları ayrıca COM bileşenleri ve .NET kitaplıkları içerebilir.
Bir DLL ne içerir?
Bir DLL, bir EXE veya diğer DLL'nin kullandığı işlevler, sınıflar, değişkenler, kullanıcı arabirimleri ve kaynaklar (simgeler, resimler, dosyalar, ... gibi) içerir.
Kütüphane türleri:
Neredeyse tüm işletim sistemlerinde 2 tür kütüphane vardır. Statik kütüphaneler ve dinamik kütüphaneler. Windows'da dosya uzantıları aşağıdaki gibidir: Statik kütüphaneler (.lib) ve dinamik kütüphaneler (.dll). Temel fark, statik kütüphanelerin derleme zamanında çalıştırılabilir dosyaya bağlanmasıdır; dinamik bağlantılı kütüphaneler çalışma zamanına kadar bağlı değildir.
Statik ve dinamik kütüphaneler hakkında daha fazla bilgi:
Statik kitaplık doğrudan bir modülün (EXE veya DLL) içine gömülü olduğundan, normalde bilgisayarınızda olsa da statik kitaplıkları görmezsiniz. Dinamik kütüphane tek başına bir dosyadır.
Bir DLL herhangi bir zamanda değiştirilebilir ve yalnızca bir EXE açıkça DLL'yi yüklediğinde çalışma zamanında yüklenir. Statik kitaplık EXE içinde derlendikten sonra değiştirilemez. Bir DLL EXE kendisini güncelleştirmeden ayrı ayrı güncelleştirilebilir.
DLL yükleme:
Bir program başlangıçta, Win32 API LoadLibrary aracılığıyla veya başka bir DLL'nin bağımlılığı olduğunda bir DLL yükler. Bir program bir işlevi yüklemek için GetProcAddress'i veya bir kaynağı yüklemek için LoadResource'u kullanır.
Daha fazla okuma:
Daha fazla bilgi için lütfen MSDN veya Wikipedia'yı kontrol edin. Ayrıca bu cevabın kaynakları.
DLL nedir?
DLL dosyaları, yürütülebilir kod ve görüntüler, vb. Gibi kaynaklar içerebilen ikili dosyalardır. Uygulamaların aksine, bunlar doğrudan yürütülemez, ancak bir uygulama gerektiğinde (veya başlatma sırasında aynı anda) yükler.
Onlar önemli mi?
Çoğu uygulama başlangıçta ihtiyaç duydukları DLL dosyalarını yükler. Bunlardan herhangi biri bulunmazsa, sistem işlemi hiç başlatamaz.
DLL dosyaları başka DLL dosyaları gerektirebilir
Bir uygulama bir DLL dosyası gerektirdiği gibi, bir DLL dosyası diğer DLL dosyalarının kendisine bağımlı olabilir. Bağımlılık zincirindeki bu DLL dosyalarından biri bulunamazsa, uygulama yüklenmez. Bu, Dependency Walker gibi herhangi bir bağımlılık yürüteç aracı kullanılarak kolayca hata ayıklanır .
Sistem klasörlerinde çok fazla var
Sistem işlevselliğinin çoğu, kod / kaynakları paylaşmanın standart bir biçimi oldukları için DLL dosyaları biçimindeki bir kullanıcı programına maruz kalır. Her işlevsellik farklı DLL dosyalarında ayrı tutulur, böylece yalnızca gerekli DLL dosyaları yüklenir ve böylece sistemdeki bellek kısıtlamaları azaltılır.
Yüklü uygulamalar ayrıca DLL dosyaları kullanır
DLL dosyaları ayrıca yukarıda açıklandığı gibi fiziksel olarak işlevleri ayırmanın bir biçimi haline gelir. İyi uygulamalar da kesinlikle gerekli olana kadar DLL dosyalarını yüklememeye çalışır, bu da bellek gereksinimlerini azaltır. Bu da uygulamaların çok sayıda DLL dosyasıyla gönderilmesine neden olur.
DLL Cehennemi
Ancak, paylaşılan DLL dosyaları ile bunları gerektiren program arasında sürüm uyuşmazlığı olduğunda sistem yükseltmeleri bazen diğer programları bozar. Sistem kontrol noktaları ve DLL önbellek, vb. Bu sorunu çözmek için M $ girişimleri olmuştur. .NET platformu bu sorunla hiç karşılaşmayabilir.
Bir DLL dosyasının içinde ne olduğunu nasıl biliyoruz?
DUMPBIN veya Dependency Walker gibi harici bir araç kullanmanız gerekir; bunlar DLL dosyalarının içinde hangi genel olarak görünür işlevlerin (dışa aktarma olarak bilinir) gösterilmesini değil, aynı zamanda hangi DLL dosyalarının gerektirdiğini ve bu DLL dosyalarından hangi DLL dosyalarını dışa aktardığını da göstermelidir. bağlıdır.
Bunları nasıl yaratır / kullanırız?
Satıcınızdan programlama belgelerine bakın. C ++ için MSDN'deki LoadLibrary'ye bakın .
"The .NET platform might not face this issue at all."
) bir nedeniyle tamamlayın . Teşekkürler.
Bir kütüphanede bulunan bazı işlevleri kullanan bir yürütülebilir dosya oluşturduğunuzu varsayalım.
Kullandığınız kitaplık statikse , bağlayıcı bu işlevlerin nesne kodunu doğrudan kitaplıktan kopyalar ve yürütülebilir dosyaya ekler.
Şimdi bu yürütülebilir dosya çalıştırılırsa, gereken her şeye sahiptir, bu yüzden yürütülebilir yükleyici sadece belleğe yükler ve çalıştırır.
Kütüphane dinamikse , bağlayıcı nesne kodu eklemez, bunun yerine temel olarak bu işlevin bu konumda bu DLL'de bulunduğunu söyleyen bir saplama ekler .
Şimdi bu yürütülebilir dosya çalıştırılırsa, yürütülebilir dosyanın bitleri eksiktir (örn. Saplamalar), böylece yükleyici eksik saplamaları düzelterek yürütülebilir dosyadan geçer. Yalnızca tüm saplamalar çözüldükten sonra yürütülebilir dosyanın çalıştırılmasına izin verilir.
Bunu eylemde görmek için DLL dosyasını silin veya yeniden adlandırın ve yürütülebilir dosyayı çalıştırmayı denediğinizde yükleyicinin nasıl eksik bir DLL hatası rapor edeceğini izleyin.
Bu nedenle Dinamik Bağlantı Kütüphanesi adı , bağlama işleminin bölümleri yürütülebilir yükleyici tarafından çalışma zamanında dinamik olarak yapılır.
Son bir not, eğer DLL'ye bağlanmazsanız, bağlayıcı tarafından herhangi bir saplama eklenmeyecektir, ancak Windows hala yürütülebilir program başladıktan çok sonra DLL işlev giriş noktasını yürütmenizi sağlayan GetProcAddress API'sini sağlar.
DLL'ler (dinamik bağlantı kitaplıkları) ve SL'ler (UNIX altında eşdeğer olan paylaşılan kitaplıklar), yalnızca yükleme sırasında dinamik olarak yürütülebilir dosyaya bağlanabilen yürütülebilir kod kitaplıklarıdır.
Statik kütüphaneler bir derleme zamanında çalıştırılabilir bir dosyaya yerleştirilir ve bu noktadan sabitlenir. Yürütülebilir dosyanın boyutunu artırır ve paylaşılamaz.
Dinamik kütüphanelerin aşağıdaki avantajları vardır:
1 / Derleme zamanı yerine çalışma zamanında yüklenir, böylece yürütülebilir dosyadan bağımsız olarak güncellenebilirler (Windows'ta gördüğünüz tüm bu fantezi pencereler ve iletişim kutuları DLL'lerden gelir, böylece uygulamanızın görünümü ve hissi sensiz değişebilir yeniden yazmak zorunda).
2 / Bağımsız oldukları için kod birden fazla yürütülebilir dosyada paylaşılabilir - bu, bellek tasarrufu sağlar, çünkü tek bir DLL ile 100 uygulama çalıştırıyorsanız, bellekte yalnızca bir DLL kopyası olabilir.
Ana dezavantajı avantaj # 1 - DLL'lerin uygulamanızdan bağımsız olarak değişmesi, uygulamanızın çalışmasının durmasına veya tuhaf bir şekilde davranmaya başlamasına neden olabilir. DLL sürüm oluşturma, Windows altında çok iyi yönetilmeme eğilimindedir ve bu, antika olarak adlandırılan "DLL Hell" e yol açar.
DLL dosyaları , çağıran program tarafından aranabilecek sembollerin bir listesi olan bir Dışa Aktarma Tablosu içerir . Semboller tipik olarak C çağırma kuralına ( __stcall ) sahiptir. Dışa aktarma tablosu ayrıca işlevin adresini içerir.
Bu bilgi ile, çağrı programı derleme zamanında DLL erişimi olmasa bile DLL içindeki işlevleri çağırabilir.
Dinamik Bağlantı Kütüphaneleri ile tanışmanın daha fazla bilgisi var.
http://support.microsoft.com/kb/815065
Bir DLL, aynı anda birden fazla program tarafından kullanılabilen kod ve veriler içeren bir kitaplıktır. Örneğin, Windows işletim sistemlerinde, Comdlg32 DLL ortak iletişim kutusuyla ilgili işlevleri gerçekleştirir. Bu nedenle, her program bir Aç iletişim kutusu uygulamak için bu DLL içerdiği işlevi kullanabilir. Bu, kodun yeniden kullanılmasını ve etkin bellek kullanımını teşvik eder.
Bir DLL kullanarak, bir program ayrı bileşenlere modüler hale getirilebilir. Örneğin, bir muhasebe programı modül tarafından satılabilir. Modül takılıysa, her modül çalışma zamanında ana programa yüklenebilir. Modüller ayrı olduğundan, programın yükleme süresi daha hızlıdır ve bir modül yalnızca bu işlevsellik istendiğinde yüklenir.
Ayrıca, programın diğer bölümlerini etkilemeden güncellemelerin her bir modüle uygulanması daha kolaydır. Örneğin, bir bordro programınız olabilir ve vergi oranları her yıl değişir. Bu değişiklikler bir DLL dosyasında yalıtıldığında, tüm programı yeniden yüklemenize veya yüklemenize gerek kalmadan bir güncelleştirme uygulayabilirsiniz.
DLL bir Dosya Uzantısıdır ve Windows programları için birden fazla kod ve prosedürü tutmak için kullanılan “dinamik bağlantı kitaplığı” dosya biçimidir. Yazılım ve Oyunlar DLL Dosyalarının temelleri üzerinde çalışır; DLL dosyaları, birden çok uygulamanın bilgilerini aynı anda kullanabilmesi için oluşturuldu.
DLL Dosyaları hakkında daha fazla bilgi almak veya herhangi bir hatayla karşılaşmak istiyorsanız aşağıdaki yazıyı okuyun. https://www.bouncegeek.com/fix-dll-errors-windows-586985/
DLL dosyaları (Dinamik Bağlantı Kitaplıkları) bir veya daha fazla uygulama veya hizmet tarafından kullanılan kaynakları içerir. Sınıfları, simgeleri, dizeleri, nesneleri, arayüzleri ve geliştiricinin UI dışında depolaması gereken hemen hemen her şeyi içerebilirler.
Microsoft'a göre
(DLL) Dinamik bağlantı kitaplıkları, uygulamaların çalışması için gereken veri, kod veya kaynakları içeren dosyalardır. Bunlar, Windows ekosistemi tarafından oluşturulan ve iki veya daha fazla uygulama arasında paylaşılabilen dosyalardır.
Bir program veya yazılım Windows'ta çalıştığında, uygulamanın nasıl çalıştığının çoğu programın DLL dosyalarına bağlıdır. Örneğin, belirli bir uygulamanın birkaç modülü varsa, her bir modülün birbirleriyle nasıl etkileşimde bulunduğu Windows DLL dosyaları tarafından belirlenir.
Ayrıntılı açıklama istiyorsanız, bu yararlı kaynakları kontrol edin