Программирование для Windows NT (том 2)




Инициализация DLL-библиотеки в среде Microsoft Windows NT - часть 2


  • когда параметр fdwReason равен DLL_PROCESS_DETACH и функция DLLEntryPoint вызвана в результате завершения процесса, а не вызова функции FreeLibrary
  • В процессе инициализации функция DLLEntryPoint может отменить загрузку DLL-библиотеки. Если код причины вызова равен DLL_PROCESS_ATTACH, функция DLLEntryPoint отменяет загрузку библиотеки, возвращая значение FALSE. Если же инициализация выполнена успешно, функция должна возвратить значение TRUE.

    В том случае, когда приложение пыталось загрузить DLL-библиотеку функцией LoadLibrary, а функция DLLEntryPoint отменила загрузку, функция LoadLibrary возвратит значение NULL. Если же приложение выполняет инициализацию DLL-библиотеки неявно, при отмене загрузки библиотеки приложение также не будет загружено для выполнения.

    Приведем пример функции инициализации DLL-библиотеки:

    BOOL WINAPI DLLEntryPoint(

      HMODULE hModule,    // идентификатор модуля

      DWORD   fdwReason,  // причина вызова функции DLLEntryPoint

      LPVOID  lpvReserved)// зарезервировано

    {

      switch(fdwReason)

      {

        // Подключение нового процесса

        case DLL_PROCESS_ATTACH:

        {

          // Обработка подключения процесса

          . . .

          break;

        }

        // Подключение новой задачи

        case DLL_THREAD_ATTACH:

        {

          // Обработка подключения новой задачи

          . . .

          break;

        }

        // Отключение процесса

        case DLL_PROCESS_DETACH:

        {

           // Обработка отключения процесса

           . . .

           break;

        }

        // Отключение задачи

        case DLL_THREAD_DETACH:

        {

          // Обработка отключения задачи

          . . .

          break;

        }

      }

      return TRUE;

    }




    Содержание  Назад  Вперед