Ограничения библиотек DLL, загружаемых с задержкой
Существует ряд ограничений, связанных с отложенной загрузкой файлов импорта.
Файлы импорта данных не поддерживаются. Существует обходной путь, заключающийся в явном импорте данных с помощью методов LoadLibrary (или GetModuleHandle после того, как вспомогательная функция отложенной загрузки загрузила библиотеку DLL) и GetProcAddress.
Отложенная загрузка Kernel32.dll не поддерживается. Эта библиотека DLL необходима для того, чтобы вспомогательные подпрограммы отложенной загрузки могли выполнить отложенную загрузку.
Связывание переадресованных точек входа не поддерживается.
Отложенная загрузка библиотеки DLL может изменить поведение процесса, если в точке входа библиотеки DLL, загружаемой с задержкой, осуществляется инициализация процессов. Еще один подобный случай — это статическая память TLS (локальная память потока), объявляемая с помощью директивы __declspec(thread). Она не работает, если библиотека DLL загружается с помощью метода LoadLibrary. Тем не менее, как в статических библиотеках DLL, так и в библиотеках DLL, загружаемых с задержкой, доступна для использования динамическая память TLS, реализуемая с помощью функций TlsAlloc, TlsFree, TlsGetValue и TlsSetValue.
Статические (глобальные) указатели импортируемых функций потребуется инициализировать заново после первого вызова соответствующих функций. Причина в том, что при первом вызове указатель функции указывает на преобразователь.
В настоящее время не существует способа отложить загрузку отдельных подпрограмм в библиотеке DLL при использовании нормального механизма импорта.
Пользовательские соглашения о вызовах (например использование условных кодов в архитектурах x86) не поддерживаются. Кроме того, регистры с плавающей запятой не сохраняются ни на одной платформе. Если пользовательская вспомогательная подпрограмма или обработчик используют типы данных с плавающей запятой, то в них потребуется выполнить полное сохранение и восстановление состояния регистров с плавающей запятой на компьютерах, где в соглашениях о вызовах для передачи параметров с плавающей запятой используются регистры. Следует осторожно подходить к отложенной загрузке библиотеки DLL времени выполнения (CRT), если в программе вызываются функции CRT, принимающие параметры с плавающей запятой через стек арифметического сопроцессора (NDP) во вспомогательной функции.
См. также
Основные понятия
Поддержка компоновщика для DLLs, загружаемых с задержкой