C # kodumda her zaman DLL'leri referans alıyorum, ancak açıklığa kavuşturmak istediğim bir şekilde bir gizem olarak kaldılar. Bu, DLL'lerle ilgili soruların bir tür beyin dökümüdür.
Bir DLL'nin dinamik olarak bağlantılı bir kitaplık olduğunu anlıyorum, bu da başka bir programın "işlevsellik" elde etmek için bu kitaplığa çalışma zamanında erişebileceği anlamına geliyor. Ancak, aşağıdaki ASP.NET projesini Web.dll
ve Business.dll
( Web.dll
ön uç işlevselliği ve Business.dll
türler ve yöntemler için başvurular ) ile düşünün .
Web.dll
Dinamik olarak hangi noktada bağlanırBusiness.dll
? Windows HDD'de Word (vb.) Kullanırken görünüşte küçük görevler için çok fazla şey fark ediyorsunuz ve Word'ün kapandığını ve diğer DLL'lerden işlevsellik açısından dinamik olarak bağlantı kurduğunu tahmin ediyorum?1 A. Ek olarak, DLL'yi yükleyen ve bağlayan şey - işletim sistemi veya .NET çerçevesi gibi bazı çalışma zamanı çerçevesi?
1b. "Bağlama" süreci nedir? Uyumluluk kontrolleri yapıldı mı? Aynı belleğe mi yükleniyor? Bağlama aslında ne anlama geliyor?
DLL'deki kodu gerçekte ne çalıştırır? İşlemci tarafından çalıştırılıyor mu veya işlemci DLL içindeki kodu anlamadan önce başka bir çeviri veya derleme aşaması var mı?
2a. C # .NET'te yerleşik bir DLL olması durumunda, bunu çalıştıran nedir: .NET çerçevesi mi yoksa işletim sistemi mi?
Linux'tan bir DLL bir Windows sisteminde çalışıyor mu (böyle bir şey varsa) veya işletim sistemine özel mi?
DLL'ler belirli bir çerçeveye özel mi? C # .NET kullanılarak oluşturulan bir DLL, örneğin Borland C ++ ile oluşturulmuş bir DLL tarafından kullanılabilir mi?
4a. 4'ün yanıtı "hayır" ise, o zaman DLL'nin anlamı nedir? Neden çeşitli çerçeveler bağlantılı dosyalar için kendi formatlarını kullanmıyor? Örneğin: .NET'te yerleşik bir .exe, .abc dosya türünün koduna bağlanabileceği bir şey olduğunu bilir.
İçin geri gidiş
Web.dll
/Business.dll
örnek - Ben referansa ihtiyaç müşteri bir sınıf türü almak içinBusiness.dll
gelenWeb.dll
. Bu,Business.dll
müşteri sınıfının gerçekte ne olduğuna dair bir tür spesifikasyon içerdiği anlamına gelmelidir . DosyamıBusiness.dll
Delphi'de derlemiş olsaydım : C # onu anlayıp bir müşteri sınıfı oluşturabilir miydi, yoksa bir tür başlık bilgisi veya "hey üzgünüm beni sadece başka bir Delphi DLL'den kullanabilirsiniz" diyen bir şey var mı? ?5a. Aynı yöntem yöntemler için de geçerlidir;
CreateInvoice()
Bir DLL'ye bir yöntem yazıp , bunu C ++ 'da derleyip sonra ona C # erişip çalıştırabilir miyim? Bunu yapmama engel olan veya bunu yapmama izin veren nedir?DLL korsanlığı konusunda, kesinlikle değiştirilen (kötü) DLL, ele geçirilenle aynı yöntem imzalarını ve türlerini içermelidir. Orijinal DLL'de hangi yöntemlerin mevcut olduğunu bulabilirseniz, bunu yapmak zor olmazdı.
6a. C # programımda başka bir DLL'ye erişip erişemeyeceğime karar veren nedir? Ele geçirilen DLL'm orijinaliyle tamamen aynı yöntemleri ve türleri içeriyorsa, ancak başka bir dilde derlenmişse, çalışır mı?
DLL içe aktarma ve DLL kaydı nedir?