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.dllve Business.dll( Web.dllön uç işlevselliği ve Business.dlltürler ve yöntemler için başvurular ) ile düşünün .
Web.dllDinamik 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.dllgelenWeb.dll. Bu,Business.dllmüşteri sınıfının gerçekte ne olduğuna dair bir tür spesifikasyon içerdiği anlamına gelmelidir . DosyamıBusiness.dllDelphi'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?