Управление загрузкой DLL |
![]() |
![]() |
Статьи |
Когда Вы пишете динамически загружаемые библиотеки и необходимо контролировать загрузкой и выгрузкой DLL, или если Вы хотите подготовить DLL при инициализации, у Вас может быть функция с именем DllMain, которая будет делать инициализацию. Windows вызывает функцию DllMain из DLL в четырех случаях:
Каждая DLL имеет точку входа. Эта точка входа реализована как функция обратного вызова. Она вызывается системой, когда событие происходит. Функция имеет имя по умолчанию DllMain. DLL, которая не должна быть загружена по определению, может просто возвращать False в функции DllMain() как только она обнаруживает, кто вызывает ее. В Delphi, DLLProc используется для определения процедуры, которая вызывается каждый раз, когда вызывается точка входа библиотеки DLL. Процедура назначенная на DLLProc получает один параметр целое число (Reason). Функция API GetModuleFileName() возвращает название вызывающего модуля, если Вы передаете 0 как его первый аргумент. Этот параметр - дескриптор модуля, имя которого Вы хотите знать. Когда параметр Reason - DLL_PROCESS_ATTACH, устанавливая ExitCode в ненулевое значение, заставляет точку входа возвращать False. Вот пример кода, который позволяет только MyCallingApp.exe загружать библиотеку (Примечание: у DLL в этом примере нет НИКАКОГО кода кроме процедуры DLLMain): pre |
Комментарии
RSS лента комментариев этой записи