Лабораторная работа №9. Создание динамических библиотек. Цель работы: Освоить создание динамических библиотек. Задания: Создать dll



бет3/4
Дата02.12.2023
өлшемі21,58 Kb.
#131420
түріЛабораторная работа
1   2   3   4
Параметры процедуры входа

Процедура входа (entry point) - это функция или блок кода, с которого начинается выполнение программы. В зависимости от типа приложения и языка программирования, параметры процедуры входа могут различаться. Давай рассмотрим несколько типов приложений и соответствующие параметры их процедур входа:
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
// Тело функции
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
// Вызывается при загрузке DLL в адресное пространство процесса
// lpReserved - NULL для статически загруженных DLL, не NULL для динамически загруженных
break;
case DLL_THREAD_ATTACH:
// Вызывается при создании нового потока в процессе
break;
case DLL_THREAD_DETACH:
// Вызывается при завершении потока
break;
case DLL_PROCESS_DETACH:
// Вызывается при выгрузке DLL из адресного пространства процесса
break;
}
return TRUE;
}
Описание параметров:

  • hModule (Handle to Module):

  • Это дескриптор (указатель) на экземпляр DLL в адресном пространстве процесса. Он может использоваться, например, для получения пути к файлу DLL.

  • ul_reason_for_call (Reason for Call):

  • Это значение, указывающее на причину вызова DllMain. Оно принимает одно из следующих значений:

  • DLL_PROCESS_ATTACH: DLL загружается в адресное пространство процесса.

  • DLL_THREAD_ATTACH: Создается новый поток в процессе.

  • DLL_THREAD_DETACH: Завершается поток.

  • DLL_PROCESS_DETACH: DLL выгружается из адресного пространства процесса.

  • lpReserved:

  • Это указатель, который может быть использован в различных сценариях. Для DLL_PROCESS_ATTACH, если DLL загружена динамически (с использованием LoadLibrary), lpReserved не равен NULL. В остальных случаях обычно равен NULL.

Функция DllMain должна возвращать TRUE, если загрузка или выгрузка DLL прошла успешно, и FALSE в случае ошибки.






Достарыңызбен бөлісу:
1   2   3   4




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет