PRB: Volanie LoadLibrary() načítať knižnicu DLL, ktorá má statické TLS

Preklady článku Preklady článku
ID článku: 118816 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

PRIZNAKY

Dynamic-link library (DLL) používa __declspec(vlákno) prideliť lokálneho ukladania statických vlákno (TLS). Neexistujú žiadne problémy spojené s beží aplikácia, ktorá je prepojená s zodpovedajúce statické knižnice. Avšak, keď aplikácia používa Funkcia LoadLibrary Funkcia načítať knižnicu DLL namiesto pou??itia statické verzia, Funkcia LoadLibrary prehrá v Win32s s kódom chyby 87: neplatný parameter.

Funkcia LoadLibrary uspeje na počítači so systémom Windows 98, Windows NT alebo Windows 2000 v tejto situácii. Správanie volanie funkcie v knižnici DLL, ktoré odkazujú na statické TLS premenných je však nedefinovaný. V systéme Microsoft Windows 95 Funkcia LoadLibrary zlyhá a GetLastError Funkcia vráti 1114 - ERROR_DLL_INIT_FAILED (dynamicky prepojovanej knižnice bežná Inicializácia zlyhala). V systéme Windows 2000 Funkcia LoadLibrary Funkcia uspeje. Avšak, akýkoľvek pokus o prístup k údajom TLS spôsobuje porušenie prístupu (AV).

PRICINA

Toto je obmedzenie Funkcia LoadLibrary a __declspec. Globálna premenná priestor pre vlákno je pridelené v čase spustenia. Veľkosť je založená na výpočet požiadaviek uplatňovanie plus požiadavky všetkých knižníc, ktoré sú staticky prepojené. Ak knižnica DLL používa statické TLS a je dynamický spojené v žiadosti, keď Funkcia LoadLibrary alebo FreeLibrary je názvom, systém musí nájsť všetky vlákna, ktoré existujú v procese a zväčšiť alebo kompaktné ich TLS pamäte podľa podľa veľkosti statické TLS v novo naložená knižnici DLL. Tento proces je príliš veľa pre operačné systémy na správu, ktoré môžu spôsobiť výnimku buď keď DLL je dynamicky sa nakladá alebo kódom odkazy údaje.

RIESENIE

DLL, ktoré používajú __declspec(vlákno) by nebolo možné načítať s Funkcia LoadLibrary.

DLL kódexu by sa mali upraviť používať také TLS funkcie ako TlsAlloc, a prideliť TLS, ak by mohli byť zaťažená DLL Funkcia LoadLibrary. Alebo DLL, ktorý používa __declspec(vlákno), by sa len implicitne naložené do aplikácie.

DALSIE INFORMACIE

Na určenie, či knižnica DLL používa statické TLS, Dumpbin.exe nástroj môže byť použitý k výpisu informácie v hlavičke. Knižnice DLL má statické TLS, ak hodnoty voliteľné Hlavička obsahuje veľkosť, ktorá je väčšia ako 0 (nula) v adresári skladovanie Thread takto:
517B20 [18] RVA [veľkosť] Thread skladovanie adresára

Vlastnosti

ID článku: 118816 - Posledná kontrola: 10. októbra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft Win32 Application Programming Interface, pri použití s produktom:
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
Kľúčové slová: 
kbdll kbkernbase kbprb kbthread kbmt KB118816 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:118816

Odošlite odozvu

 

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