Contraintes relatives aux DLL à chargement différé
Mise à jour : novembre 2007
Il existe des contraintes liées au chargement différé des importations.
Les importations de données ne peuvent pas être prises en charge. Une solution consiste à gérer vous-même explicitement l'importation de données à l'aide de LoadLibrary (ou GetModuleHandle si vous savez que l'assistance de chargement différé a déjà chargé la DLL) et GetProcAddress.
La DLL de chargement différé Kernel32.dll n'est pas prise en charge. Cette DLL est nécessaire pour que les routines d'assistance de chargement différé puissent effectuer le chargement différé.
La liaison des points d'entrée transmis n'est pas prise en charge.
Le chargement différé d'une DLL peut générer un comportement du processus différent si des initialisations intervenant via des processus se produisent dans le point d'entrée de la DLL à chargement différé. Parmi les autres cas figure le stockage local de threads (TLS, Thread Local Storage) statique, déclaré à l'aide de __declspec(thread), qui n'est pas géré lorsque la DLL est chargée via LoadLibrary. Le TLS dynamique, grâce à TlsAlloc, TlsFree, TlsGetValue et TlsSetValue est toujours disponible pour une utilisation dans les DLL statiques ou à chargement différé.
Les pointeurs fonction statiques (globaux) doivent être réinitialisés en fonctions importées après le premier appel à la fonction. Cela est dû au fait que la première utilisation du pointeur fonction consiste à pointer vers le thunk.
Il n'existe actuellement aucun moyen de différer le chargement sélectif de certaines procédures spécifiques à partir d'une DLL tout en utilisant le mécanisme d'importation normal.
Les conventions d'appel personnalisées (telles que l'utilisation de codes sur les architectures x86) ne sont pas prises en charge. Vous ne pouvez pas non plus utiliser les types de données à virgule flottante dans n'importe quelle routine d'assistance ou n'importe quel raccordement sur les ordinateurs RISC. Les registres à virgule flottante ne sont enregistrés sur aucune plate-forme. Si vos routines de raccordement ou votre routine d'assistance personnalisée utilisent les types à virgule flottante, elles doivent enregistrer et rétablir complètement l'état virgule flottante sur les ordinateurs qui inscrivent les conventions d'appel à l'aide des paramètres à virgule flottante. Lors du chargement différé de la DLL CRT, soyez prudent si vous appelez des fonctions CRT qui prennent les paramètres à virgule flottante sur une pile NDP (Numeric Data Processor) dans la fonction d'assistance.
Voir aussi
Concepts
Prise en charge de l'éditeur de liens pour les DLL à chargement différé