Vincoli delle DLL a caricamento ritardato
Aggiornamento: novembre 2007
Per il caricamento ritardato delle importazioni sono definiti alcuni vincoli.
Le importazioni di dati non possono essere supportate. Una soluzione alternativa consiste nel gestire personalmente e in modo esplicito l'importazione di dati mediante LoadLibrary, oppure GetModuleHandle in seguito al caricamento effettivo della DLL mediante il supporto del caricamento ritardato, e GetProcAddress.
Il caricamento ritardato di Kernel32.dll non è supportato. Questa DLL è necessaria alle routine di supporto del caricamento ritardato per l'esecuzione delle relative attività.
L'associazione di punti di ingresso inoltrati non è supportata.
Se si verificano inizializzazioni per processo nel punto di ingresso della DLL a caricamento ritardato, il comportamento del caricamento ritardato di una DLL può essere diverso. Altri casi comprendono la memoria locale di thread statica dichiarata con __declspec(thread), che non è gestita quando la DLL viene caricata mediante LoadLibrary. La memoria locale di thread dinamica, che utilizza TlsAlloc, TlsFree, TlsGetValue e TlsSetValue, può essere comunque utilizzata in DLL statiche e in DLL a caricamento ritardato.
I puntatori a funzione statici (globali) devono essere reinizializzati sulle funzioni importate dopo la prima chiamata alla funzione, in quanto durante il primo utilizzo della funzione a puntatore verrà considerato come riferimento il thunk.
Attualmente non è possibile ritardare il caricamento da una DLL delle sole routine specifiche con l'utilizzo del normale meccanismo di importazione.
Le convenzioni di chiamata personalizzate, come l'uso di flag su architetture x86, non sono supportate. Non è inoltre consentito l'uso di tipi di data a virgola mobile negli hook o nelle routine di supporto su computer RISC. I registri a virgola mobile non vengono salvati in alcuna piattaforma. Se nella routine di supporto o nelle routine di hook personalizzate vengono utilizzati tipi a virgola mobile, è necessario salvare e ripristinare completamente lo stato della virgola mobile sui computer mediante convenzioni di chiamata del registro con parametri a virgola mobile. Il caricamento ritardato della DLL CRT deve essere eseguito con particolare attenzione nel caso in cui vengano effettuate chiamate alle funzioni CRT che accettano parametri a virgola mobile su uno stack NDP (numeric data processor) nella funzione di supporto.