Makale numarası: 815065 - Bu makalenin geçerli olduğu ürünleri görün.
Bu ne makalede dinamik bağlantı kitaplığı (DLL) olduğunu ve DLL'leri kullandığınızda oluşabilecek çeşitli sorunları.
Sonra bu makalede, kendi dll geliştirirken göz önüne alınması gereken bazı gelişmiş sorunlar açıklanır. Bir DLL açıklayan içinde olduğundan, bu makalede dinamik bağlama yöntemlerini DLL bağımlılıklar, DLL giriş noktaları açıklar, DLL işlevleri ve sorun giderme araçları DLL verme.
Bu makalede, üst düzey bir karşılaştırmasını Microsoft .NET Framework derlemeler. DLL'ler ile tamamlanır
Microsoft Windows işletim "Aşağıdakilere Uygulanır" bölümünde listelenen sistemleri için işletim sistemi işlevselliğinin çoğunu dinamik bağlantı kitaplıkları (DLL) tarafından sağlanır. Bu <a0>Windows</a0> işletim sistemlerinden birinde bir programı çalıştırdığınızda, ayrıca, çoğu program işlevselliğini DLL tarafından sağlanabilir. Örneğin, bazı programlar, birçok farklı modülleri içerebilir ve modüllerin programın bulunan ve DLL içinde dağıtılmış.
Dll kullanımını modularization kodu, kodu yeniden kullanma, etkin bir bellek kullanımı yükseltmek yardımcı olur ve disk alanı sınırlı. Bu nedenle, işletim sistemini ve programları daha hızlı yüklenir, daha hızlı çalışmasını ve bilgisayar üzerinde daha az disk alanı olması.
Bir programı, bir DLL kullandığında, bağımlılık adlı bir sorun yok çalıştırılacak programın neden olabilir. Bir programı, bir DLL kullandığında, bir bağımlılık oluşturulur. Başka bir program üzerine yazar ve bu bağımlılık keser, özgün programın başarılı bir şekilde çalışmayabilir.
Microsoft .NET Framework'ün giriş ile bağımlılık sorunlarının çoğu derlemeler kullanarak elemiş.
DLL nedir?Kod ve aynı anda birden fazla program tarafından kullanılan veri içeren bir kitaplık dll'dir. Örneğin, Windows işletim sistemlerinde, Comdlg32 DLL ortak gerçekleştiren işlevler kutusu ilgili. Bu nedenle, her program, açık bir iletişim kutusu uygulamak için bu DLL bulunan işlevleri kullanabilirsiniz. Bu, kodu yeniden kullanma ve etkin bir bellek kullanımı yükseltmek yardımcı olur.
Bir DLL DOSYASı'nı kullanarak, bir programın ayrı bileşenlerine modularized olabilir. Örneğin, bir muhasebe programını modülü tarafından satılacak. Bu modül yüklü değilse, her modülün zamanında ana programa yüklenebilir. Modülleri ayrı olduğundan, programın yükleme süresi daha hızlıdır ve bu işlevselliği istenen bir modüle yalnızca yüklenir.
Ayrıca, güncelleştirmeleri programın diğer bölümlerini etkilemeden, her modül için geçerli kolaydır. Örneğin, Bordro bir program olabilir ve her yıl vergisi oranları değiştirme. Bu değişiklikleri bir DLL için yalıtılmış olduğunda, bir güncelleştirme oluşturmak veya tüm programı yüklemeyi yeniden uygulayabilirsiniz.
Aşağıdaki listede, dll, Windows işletim sistemlerinde uygulanan dosyaların bazıları açıklanmaktadır:
DLL yararlarıAşağıdaki liste, bir programı, bir DLL kullandığında, sağlanan yararlarından bazılarını açıklar:
DLL bağımlılığıBir DLL işlevi, bir program ya da bir DLL başka bir DLL kullandığında, bir bağımlılık oluşturulur. Bu nedenle, artık kendi içinde bütünlük oluşturan programdır ve bağımlılık başarısız olması durumunda, program sorunlarla karşılaşabilirsiniz. Örneğin, aşağıdaki eylemlerden biri oluşursa, program çalışmayabilir:
Aşağıdaki liste, Microsoft Windows 2000 ve sonraki Windows işletim sistemlerindeki bağımlılık sorunları en aza indirmek için sunulan değişiklikler açıklanır:
DLL sorun giderme araçlarıDLL sorunlarını gidermenize yardımcı olacak çeşitli araçlar kullanılabilir. Aşağıdaki araçlar, bu araçları birkaçıdır.
Bağımlılık WalkerBağımlılık Walker aracı için bir program tarafından kullanılan tüm bağımlı DLL'lerin özyinelemeli olarak tarama olabilir. Bağımlılık Walker bir programı açtığınızda, bağımlılık Walker aşağıdaki gerçekleştirmez:
drive\Program Files\Microsoft visual Studio\Common\Tools
Evrensel sorun Çözücü DLLDLL Evrensel sorun Çözücü (DUPS) aracı, denetlemek için belgeyi karşılaştırmak ve DLL bilgilerini görüntülemek için kullanılır. Aşağıdaki listede DUPS aracı, yardımcı programlar açıklanmıştır:
247957
(http://support.microsoft.com/kb/247957/ )DUPS.exe DLL uyumluluk sorunlarını gidermek için kullanma
Veritabanı DLL YardımıDLL Yardım veritabanı Microsoft yazılım ürünlerinde tarafından yüklenen DLL'leri belirli sürümlerinde bulmanıza yardımcı olur. DLL Yardım veritabanı hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:
http://support.microsoft.com/dllhelp/
(http://support.microsoft.com/dllhelp/)
DLL geliştirmeBu bölüm, sorunları ve kendi dll geliştirirken, göz önüne alınması gereken gereksinimleri açıklanır.
Dll türleriBir uygulama için genel olarak bildirilen bir DLL DOSYASı yüklenemedi, verilen DLL işlevlerini çağıran bağlama için iki yöntem sağlar. Bağlama, için iki yükleme zamanı dinamik bağlama ve çalıştırma, dinamik bağlama yöntemlerdir.
Yükleme zamanı dinamik bağlamaYükleme zamanı dinamik bağlama bir uygulamanın açık gibi yerel işlevleri için verilen DLL işlevlerin çağrılar. Yükleme zamanı dinamik bağlama kullanmak için <a0></a0>, <a1>Üstbilgi</a1> (.h) dosyası ve bir <a0>Al</a0> <a1>Kitaplık</a1> (.lib) dosyasını derleyin ve uygulama bağlantı sağlar. Bunu yaptığınızda, the linker sistem DLL yüklenemedi ve verilen bir DLL işlevi konumları yük anda çözmek için gereken bilgileri sağlar.
Çalışma zamanı dinamik bağlamaÇalışma zamanı dinamik bağlama bir uygulama LoadLibrary işlevini veya zamanında DLL yüklenemedi LoadLibraryEx işlevini çağırır. DLL başarıyla yüklendikten sonra aramak istediğiniz verilen DLL işlevinin adresini almak için GetProcAddress işlevini kullanın. Çalışma zamanı dinamik bağlama kullandığınızda, bir <a0>alma</a0> kitaplık dosyası gerekmez.
Aşağıdaki liste, yükleme zamanı dinamik bağlama kullanın ve çalışma zamanı dinamik bağlama kullanıldığı durumlar için uygulama ölçütleri açıklanmaktadır:
DLL giriş noktasıBir DLL DOSYASı oluşturun, isteğe bağlı olarak bir giriş noktası işlevini belirtebilirsiniz. Giriş noktası işlevini, işlemler veya iş parçacığı yayılmak için DLL denir veya kendilerini DLL dosyasından ilişkisi kesildi. Veri yapıları başlatılamıyor veya DLL gerektirdiği gibi veri yapılarını yıkmak için giriş noktası işlevini kullanabilirsiniz. Ayrıca, uygulama birden çok iş parçacığı, özel bir giriş noktası işlevini her iş parçacığı için bellek ayrılamadı iş parçacığı yerel depolama (TLS) kullanabilirsiniz. Aşağıdaki kod, DLL giriş noktası işlevini örneğidir.
giriş noktası işlevini YANLıŞ bir değer döndürür, yükleme zamanı dinamik bağlama kullanıyorsanız, uygulama başlamaz. Çalıştırma dinamik bağlama kullanıyorsanız, yalnızca tek tek DLL yüklenemiyor.
Giriş noktası işlevini, yalnızca basit başlatma görevleri gerçekleştirmelisiniz ve başka bir DLL yükleniyor veya sona erdirme işlevi çağırmalıdır. Örneğin, giriş noktası işlevini, doğrudan veya dolaylı olarak LoadLibrary işlevini veya LoadLibraryEx işlevini çağırmalısınız değil. Işlem sonlandırılıyor, ayrıca, FreeLibrary işlevi çağırmalıdır değil.
Not Çok iş parçacıklı uygulamalarda erişimin emin DLL'genel veriler eşitlenir (olası veri bozulmasını önlemek için iş parçacığı güvenli). Bunu yapmak için <a0></a0>, her iş parçacığı için benzersiz veri sağlamak için TLS kullanın.
DLL işlevi vermeDLL işlevleri vermek için <a0></a0>, ekleyebilir ya da işlev anahtar sözcük için verilen DLL işlevlerin veya verilen DLL fonksiyonlarını listeler modülünün bir <a1>tanım</a1> (.def) dosyası oluşturun.
Bir işlev anahtar kullanmak için aşağıdaki anahtar sözcüğü ile vermek istediğiniz her bir işlevin bildirmelidir:
__declspec(dllexport)Verilen bir DLL işlevi uygulamada kullanmak için aşağıdaki anahtar sözcüğüyle almak istediğiniz her bir işlevin bildirmelidir:
__declspec(DllImport)Tipik olarak tanımlayan bir ifade ve <a2>verme deyimi ayırmak için bir ifdef deyimi</a2> ve <a4>alma deyimi içeren bir üstbilgi dosyası kullanabilirsiniz.
Bir <a0>modülü</a0> tanım dosyası, verilen bir DLL işlevi bildirmek için de kullanabilirsiniz. Bir <a0>modülü</a0> tanım dosyası'nı kullandığınızda verilen DLL işlevlere işlevi anahtar sözcük eklemek gerekmez. Modül tanım dosyasında, KITAPLıK deyimi ve EXPORTS deyimi için DLL bildirir. Aşağıdaki kod, bir tanım dosyası bir örnektir.
Örnek bir DLL ve uygulamaMicrosoft Visual C++ 6.0 veya Dinamik bağlantı kitaplığı Win32 proje tipi, hem de MFC AppWizard (dll)</a0> proje tipini seçerek bir DLL DOSYASı oluşturabilirsiniz.
Aşağıdaki kodu, Win32 dinamik bağlantı kitaplığı</a0> proje tipini kullanarak, Visual C++ ile oluşturulan bir DLL DOSYASı örneğidir.
Aşağıdaki kodu bir Win32 uygulaması projenin SampleDLL DLL'DE verilen DLL işlevi çağıran bir örnektir.
Not SampleDLL.lib bağlamalıdırlar yükleme zamanı dinamik bağlama alma kitaplığı, SampleDLL oluşturduğunuzda, oluşturulan proje.
Çalışma zamanı dinamik bağlama aşağıdakine benzer bir kod kullanın SampleDLL.dll çağırmak için kod DLL işlevi dışa.
Derleme ve SampleDLL uygulama bağlama, işletim sistemi Windows SampleDLL DLL aşağıdaki konumlarda sırayla arar:
.NET Framework derlemesiniMicrosoft .NET ve .NET Framework ile giriş, dll ile ilişkili sorunların çoğunu derlemeler kullanarak elemiş. Derleme .NET ortak dil çalışma zamanı (CLR) denetimi altında çalışan bir işlev mantıksal birimidir. Derleme, fiziksel olarak bir .dll dosyası veya bir .exe dosyası bulunmaktadır. Ancak, dahili bir derleme bir Microsoft Win32 DLL ' çok farklıdır.
Bir birleştirme dosyası bir derleme bildirimi türü meta verileri, Microsoft ara dili (MSIL) kodunu ve diğer kaynakları içerir. Derleme bildirimi self-describing olacak şekilde bir montaj için gereken tüm bilgileri sağlayan derlemesinin meta verileri içerir. Derleme bildiriminde, aşağıdaki bilgiler yer alır:
Aşağıdaki liste, bazı derlemeler için Win32 DLL özelliklerini karşılaştırıldığında özelliklerini açıklar:
DLL'ler ve .NET Framework hakkında daha fazla bilgi için derlemeler için aşağıdaki Microsoft Web sitelerini ziyaret edin:
DLL çakışmaları
http://msdn2.microsoft.com/en-us/library/ms811694.aspx
(http://msdn2.microsoft.com/en-us/library/ms811694.aspx)
Uygulamaları paylaşma, uygulama yan yana bileşen
http://msdn2.microsoft.com/en-us/library/ms811700.aspx
(http://msdn2.microsoft.com/en-us/library/ms811700.aspx)
Nasıl oluşturmak ve bu hizmet, uygulamalar ve yan yana derlemeler Windows XP için yalıtılmış
http://msdn2.microsoft.com/en-us/library/ms997620.aspx
(http://msdn2.microsoft.com/en-us/library/ms997620.aspx)
Dağıtımı basitleştirme ve .NET Framework ile DLL çakışmaları çözme
http://msdn2.microsoft.com/en-us/netframework/aa497268.aspx
(http://msdn2.microsoft.com/en-us/netframework/aa497268.aspx)
.NET Framework geliştirici'nin Kılavuzu: birleştirmeler
http://msdn2.microsoft.com/en-us/library/hk5f40ct(vs.71).aspx
(http://msdn2.microsoft.com/en-us/library/hk5f40ct(vs.71).aspx)
Çalışma zamanı dinamik bağlama
http://msdn2.microsoft.com/en-us/library/ms685090.aspx
(http://msdn2.microsoft.com/en-us/library/ms685090.aspx)
Yerel depolama iş parçacığı
http://msdn2.microsoft.com/en-us/library/ms686749.aspx
(http://msdn2.microsoft.com/en-us/library/ms686749.aspx)
Makale numarası: 815065 - Last Review: 4 Aralık 2007 Salı - Gözden geçirme: 5.11
Bu makaledeki bilginin uygulandığı durum:
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:815065
(http://support.microsoft.com/kb/815065/en-us/ )