A késleltetéssel betöltött DLL-ek korlátai

Számos korlátozás társul az importfájlok késedelmes betöltéséhez.

Az adatok importálása nem támogatott. Van egy olyan megoldás, amely explicit módon importálja az adatokat a LoadLibrary (vagy a GetModuleHandle-módszerekkel a segéd lusta betöltési funkció betöltése után) és a GetProcAddress segítségével.

A Kernel32.dll késleltetett betöltése nem támogatott. Ez a DLL szükséges, hogy a segédfüggő lusta szubrutinok halasztott letöltést hajthassanak végre.

A DLL halasztott terhelése megváltoztathatja a folyamat viselkedését, ha a folyamatokat inicializálják a késleltetéssel betöltött DLL belépési pontján. Egy másik hasonló eset a statikus TLS memória (helyi szálmemória), amelyet a __declspec (thread) direktíva használatával deklaráltunk. Nem működik, ha a DLL betöltődik a LoadLibrary módszerrel. Mind a statikus DLL-kben, mind pedig a késleltetéssel töltött DLL-kben a dinamikus TLS memória elérhető a TlsAlloc funkciókhoz. TlsFree. TlsGetValue és TlsSetValue.

Az importált funkciók statikus (globális) mutatóit újra kell kezdeni a megfelelő funkciók első hívása után. Ennek oka az, hogy az első hívásnál a funkció mutató a frekvenciaváltóra mutat.

Jelenleg nincs mód arra, hogy normál importálási mechanizmus használatával késleltessük az egyes rutinok DLL-be történő betöltését.

Egyéni híváskonvenciók (például a feltételes kódok használata az x86-os architektúrákban) nem támogatottak. Ezenkívül a lebegőpontos regisztereket semmilyen platformon nem tárolják. Ha az egyéni alprogram vagy kezelő lebegőpontos típusokat használ, akkor a lebegőpontos regiszterek teljes mentését és helyreállítását olyan számítógépen kell végrehajtani, ahol a regisztereket lebegőpontos egyeztetéses hívásokban használják. Ügyelni kell arra, hogy késleltesse a futásidejű DLL (CRT) betöltését, ha a program a segédfunkcióval rendelkező Aritmetikai koprocesszor (NDP) verzión keresztül fogadja a lebegőpontos paramétereket.

Kapcsolódó cikkek