Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 курс / Лекции / Лекция 11.pptx
Скачиваний:
95
Добавлен:
18.02.2023
Размер:
105.67 Кб
Скачать

Для файла описания модуля возможно изменение стандартных атрибутов глобальных и статических данных, что предоставляет общий доступ к данным для всех процессов, использующих DLL. Например, в результате включения следующей строки в файл определений модуля все инициализированные данные будут распределяться между всеми процессами, а неинициализированные данные останутся приватными для каждого процесса. Этот оператор требует, чтобы в исходном файле DLL было указано, какие данные необходимо поместить в сегмент данных .GLOBALS. Пример содержится в описании функции DLLEntryPoint.

SECTIONS

.GLOBALS READ WRITE SHARED

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

Кроме того, использование локальной области хранения потока обычно требует реализации в DLL уведомляющей точки входа (notification entry point).

Использование уведомляющей точки входа DLL

Уведомляющая точка входа обеспечивает информирование DLL при каждом присоединении и отключении процесса, а также когда присоединенный к DLL процесс создает или завершает поток. Для реализации уведомляющей точки входа в DLL потребуется поместить код функции, основанной на прототипе DLLEntryPoint.

BOOL DLLEntryPoint(HINSTANCE hlnstDLL,

DWORD dwNotification, LPVOID IpReserved);

Имя функции DLLEntryPoint служит просто заполнителем. По умолчанию модуль подключения ищет функцию с именем DLLMain. При определении точки входа в DLL функции можно присвоить любое имя. Обычно это выполняется с помощью ключа /entry в командной строке модуля подключения, как показано в следующем фрагменте кода:

link /entry:MyEntry /machine:1X86 mydll.obj

Дополнительные сведения можно найти в подробном описании этой функции.

Описание функций динамически

компонуемых библиотек

Функция

Назначение

DisableThreadLibraryCalls

Отключает уведомления DLL_THREAD_ATTACH и

 

DLL_THREAD_DETACH для указанной динамически

 

подключаемой библиотеки (DLL).

DllMain

Дополнительная точка входа в динамически подключаемую

 

библиотеку (DLL).

FreeLibrary

Уменьшает итоговое число ссылок на загруженные

 

динамически подключаемые библиотеки (DLL). Когда

 

итоговое число ссылок достигает нуля, модуль отменяет

 

отображение в адресном пространстве вызывающего

 

процесса.

FreeLibraryAndExitThread

Уменьшает итоговое число ссылок загруженной динамически

 

подключаемой библиотеки (DLL) до единицы, также, как это

 

делает FreeLibrary , затем вызывает ExitThread, чтобы

 

завершить работу вызывающего потока.

GetDllDirectory

Извлекает конкретную для приложения часть пути поиска,

 

используемого, чтобы определить

 

местонахождение DLLs для прикладной программы.

GetModuleFileName

Функция GetModuleFileName извлекает полный путь доступа к

 

файлу, содержащему указанный модуль, которым владеет

 

текущий процесс.

GetModuleFileNameEx Функция GetModuleFileNameEx извлекает полный путь доступа к

 

файлу, содержащему заданный модуль.

GetModuleHandle

Функция GetModuleHandle извлекает дескриптор указанного

 

модуля, если файл был отображен в адресном пространстве

 

вызывающего процесса.

GetModuleHandleEx

Функция GetModuleHandleEx извлекает дескриптор указанного

 

модуля, если файл был отображен в адресное пространство

 

вызывающего процесса.

GetProcAddress

Функция GetProcAddress извлекает адрес экспортируемой

 

функции или переменной от заданной динамически подключаемой

 

библиотеки (DLL).

LoadLibrary

Функция LoadLibrary отображает заданный исполняемый модуль

 

в адресное пространство вызывающего процесса.

LoadLibraryEx

Функция LoadLibraryEx отображает указанный исполняемый

 

модуль в адресное пространство вызывающего процесса.

SetDllDirectory

Функция SetDllDirectory добавляет каталог к пути поиска,

 

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

 

прикладной программы.

Соседние файлы в папке Лекции