Поделиться через


Ограничения библиотек DLL, загружаемых с задержкой

Обновлен: Ноябрь 2007

Существует ряд ограничений, связанных с загружаемыми с задержкой файлами импорта.

  • Файлы импорта данных не поддерживаются. Существует обходной путь, заключающийся в явном выполнении импорта данных с помощью методов LoadLibrary (или GetModuleHandle после того, как вспомогательный модуль загрузки с задержкой загрузил библиотеку DLL) и GetProcAddress.

  • Загрузка Kernel32.dll с задержкой не поддерживается. Эта библиотека DLL необходима для того, чтобы подпрограммы вспомогательного модуля загрузки с задержкой могли выполнить загрузку с задержкой.

  • Связывание переадресованных точек входа не поддерживается.

  • Загрузка библиотеки DLL с задержкой может изменить поведение процесса, если в точке входа библиотеки DLL, загружаемой с задержкой, осуществляется внутрипроцессная инициализация. Еще один подобный случай — это статическая память TLS (локальная память потока), объявляемая с помощью директивы __declspec(thread); она не работает, если библиотека DLL загружается с помощью метода LoadLibrary. Тем не менее, как в статических библиотеках DLL, так и в библиотеках DLL, загружаемых с задержкой, доступна для использования динамическая память TLS, реализуемая с помощью функций TlsAlloc, TlsFree, TlsGetValue и TlsSetValue.

  • Статические (глобальные) указатели импортируемых функций потребуется инициализировать заново после первого вызова соответствующих функций. Причина в том, что при первом вызове указатель функции указывает на преобразователь.

  • В настоящее время не существует способа загрузить с задержкой отдельные процедуры в библиотеке DLL при использовании нормального механизма импорта.

  • Пользовательские соглашения о вызове (например, использование условных кодов на архитектурах x86) не поддерживаются. Также нельзя использовать типы данных с плавающей запятой в любых вспомогательных подпрограммах и обработчиках на компьютерах с архитектурой RISC. Регистры с плавающей запятой не сохраняются ни на одной платформе. Если пользовательская вспомогательная подпрограмма или обработчик использует типы данных с плавающей запятой, то в них потребуется выполнить полное сохранение и восстановление состояния регистров с плавающей запятой на компьютерах, где в соглашениях о вызове для передачи параметров с плавающей запятой используются регистры. Следует осторожно подходить к загрузке с задержкой библиотеки DLL времени выполнения (CRT), если в программе вызываются функции CRT, принимающие параметры с плавающей запятой через стек арифметического сопроцессора (NDP) во вспомогательной функции.

См. также

Основные понятия

Поддержка компоновщика для DLLs, загружаемых с задержкой