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


Ограничения библиотек 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, загружаемых с задержкой

Другие ресурсы

Функция LoadLibrary

Функция GetModuleHandle

Функция GetProcAddress

Функция TlsAlloc

Функция TlsFree

Функция TlsGetValue

Функция TlsSetValue