SORUN: Statik TLS olan bir DLL yüklenemedi LoadLibrary() arama

Makale çevirileri Makale çevirileri
Makale numarası: 118816 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Belirtiler

Bir dinamik bağlantı kitaplığı (DLL), statik bir iş parçacığı yerel depolama (TLS) ayrılamıyor __declspec (iş parçacığı) kullanır. Bağlantılı bir uygulama ile ilgili olarak statik kitaplığı çalışan ile ilgili hiçbir sorun yok. Bir uygulamanın statik sürümü yerine DLL yüklenemedi LoadLibrary işlevini kullandığında, ancak LoadLibrary Win32 sistemlerde 87 hata kodu vererek başarısız: Geçersiz parametre.

Bu durumda Windows 98, Windows NT veya Windows 2000 çalıştıran bir bilgisayarda LoadLibrary başarılı. Ancak, statik TLS değişkenler başvuran fonksiyonlarında DLL arama davranışı tanımlı değil. Microsoft Windows 95, LoadLibrary başarısız oluyor ve GetLastError döndürür 1114 - ERROR_DLL_INIT_FAILED (başarısız BIR devingen bağlantı kitaplığını başlatma yordamı) işlevi. Windows 2000'de LoadLibrary işlevini başarılı olur. Ancak, bir erişim ihlali (AV) TLS veri erişim girişimleri neden olur.

Neden

LoadLibrary ve __declspec kısıtlamasıdır. Bir iş parçacığı genel değişken alan çalışma zamanında tahsis edilir. Boyutu bir uygulamanın gereksinimleriyle artı statik olarak bağlanan kitaplıkların gereksinimlerini hesaplama temel alır. Bir DLL statik TLS kullanan LoadLibrary veya FreeLibrary çağrıldığında bir uygulamada, dinamik bağlı ise, sistem, işlemde, varolan büyüten veya kendi TLS bellek boyutu, yeni yüklenen dll'de statik TLS göre compact tüm iş parçacıkları bulmak gerekir. Bu yönetmek, <a0></a0>, DLL dinamik olarak yüklenir veya <a1>Başvurular</a1> verileri kod bir özel duruma neden önyükleme için çok fazla işlemidir.

Çözüm

__Declspec (iş parçacığı) kullanan bir DLL ile LoadLibrary yüklenmemiş.

DLL kodu gibi TLS işlevleri TlsAlloc ve DLL LoadLibrary ile yüklenen TLS ayırmaya değiştirilmesi. Veya, __declspec (iş parçacığı) kullanarak DLL yalnızca örtülü olarak uygulamasına yüklenmesi.

Daha fazla bilgi

Bir DLL statik TLS kullanıp kullanmadığını belirlemek için <a0></a0>, dumpbin.exe aracın başlık bilgileri dökümü için kullanılabilir. Isteğe BAĞLı HEADER DEĞERLERINI aşağıdaki gibi dizinindeki Thread depolama birimi, 0 (sıfır)'dan büyük bir boyutu içeriyorsa, BIR DLL statik TLS vardır:
Iş parçacığı depolama Directory'nin 517B20 [18] RVA [boyutu]

Özellikler

Makale numarası: 118816 - Last Review: 21 Kasım 2006 Salı - Gözden geçirme: 3.2
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Win32 Uygulama Programlama Arabirimi, Ne zaman ne ile kullanilir:
    • Microsoft Windows 95
    • Microsoft Windows 98 Standard Edition
    • the operating system: Microsoft Windows 2000
    • Microsoft Windows Millennium Edition
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows XP
Anahtar Kelimeler: 
kbmt kbdll kbkernbase kbprb kbthread KB118816 KbMttr
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:118816

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com