На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Dynamic-Link Library Entry-Point Function



Every DLL must have an entry point, just as an application does. The operating system calls the entry-point function whenever processes and threads load or unload the DLL. If you are linking your DLL with a library, such as the C run-time library, it may provide an entry-point function for you, and allow you to provide a separate initialization function. Check the documentation for your runtime library for more information.

If you are providing your own entry-point, see the DllEntryPoint function. The name DllEntryPoint is a placeholder for a user-defined function. Generally, you specify an entry point for your DLL using the linker. Check your linker documentation for more information.

Calling the Entry-Point Function

The operating system calls the entry-point function whenever any one of the following events occurs:

· A process loads the DLL. For processes using load-time dynamic linking, the DLL is loaded during process initialization. For processes using run-time linking, the DLL is loaded before LoadLibrary or LoadLibraryEx returns.
· A process unloads the DLL. The DLL is unloaded when the process terminates or calls the FreeLibrary function and the reference count becomes zero. If the process terminates as a result of the TerminateProcess or TerminateThread function, the system does not call the DLL entry-point function.

· A new thread is created in a process that has loaded the DLL. You can use the DisableThreadLibraryCalls function to disable notification when threads are created.
· A thread of a process that has loaded the DLL terminates normally, not using TerminateThread or TerminateProcess. When a process unloads the DLL, the entry-point function is called only once for the entire process, rather than once for each existing thread of the process. You can use DisableThreadLibraryCalls to disable notification when threads are terminated.



Only one thread at a time can call the entry-point function.
The system calls the entry-point function in the context of the process or thread that caused the function to be called. This allows a DLL to use its entry-point function for allocating memory in the virtual address space of the calling process or to open handles accessible to the process.The entry-point function can also allocate memory that is private to a new thread by using thread local storage (TLS). For more information about thread local storage, see Thread Local Storage.

Entry-Point Function Definition

The DLL entry-point function must be declared with the standard-call calling convention.

Windows NT: If the DLL entry point is not declared correctly, the DLL is not loaded, and the system displays a message indicating that the DLL entry point must be declared with WINAPI.
Windows 95: If the DLL entry point is not declared correctly, the DLL is not loaded and the system displays a message titled "Error starting program," which instructs the user to check the file to determine the problem.

In the body of the function, you may handle any combination of the following scenarios in which the DLL entry point has been called:

· A process loads the DLL (DLL_PROCESS_ATTACH).
· The current process creates a new thread (DLL_THREAD_ATTACH).
· A thread exits normally (DLL_THREAD_DETACH).
· A process unloads the DLL (DLL_PROCESS_DETACH).



The following example demonstrates how to structure the DLL entry-point function.

BOOL WINAPI DllEntryPoint(
HINSTANCE hinstDLL, // handle to DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpReserved ) // reserved
{
// Perform actions based on the reason for calling.
switch( fdwReason )
{
case DLL_PROCESS_ATTACH:
// Initialize once for each new process.
// Return FALSE to fail DLL load.
break;

case DLL_THREAD_ATTACH:

// Do thread-specific initialization.
break;

case DLL_THREAD_DETACH:
// Do thread-specific cleanup.
break;

case DLL_PROCESS_DETACH:
// Perform any necessary cleanup.
break;
}
return TRUE; // Successful DLL_PROCESS_ATTACH.
}


Entry-Point Function Return Value

When a DLL entry-point function is called because a process is loading, the function returns TRUE to indicate success. For processes using load-time linking, a return value of FALSE causes the process initialization to fail and the process terminates. For processes using run-time linking, a return value of FALSE causes the LoadLibrary or LoadLibraryEx function to return NULL, indicating failure. The return value of the entry-point function is disregarded when the function is called for any other reason.


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

ФУНКЦИЯ Dynamic-Link Library Entry-Point



Каждое DLL должен иметь точку входа, подобно тому, как приложение делает. Операционная система называет вход-точку функции всякий раз, когда процессы и резьба загружают или снимают DLL. Если Вы связываете ваше DLL с библиотекой, как например, время прогона библиотеки C, это может обеспечить вход-точку функции для Вас и позволять Вам, чтобы обеспечивать отдельную функцию инициализации. Проверьте документацию на наличие вашего времени прогона библиотеки более подробно.

Если Вы обеспечиваете ваш собственный вход-точку, смотри функцию DllEntryPoint. Имя DllEntryPoint является метка-заполнителем для определенной функции потребителя. Обычно, Вы определяете точку входа для вашего DLL, использовавший компоновщика. Проверьте вашу документацию компоновщика более подробно.

Вызов Функции Entry-Point

Операционная система называет вход-точку функции всякий раз, когда любое из следующих событий происходит:

Нагрузки процесса DLL. Для процессов, использовавших нагрузку-время динамической связи, DLL загружен в течение инициализации процесса. Для процессов, использовавших время прогона связи, DLL загружен перед LoadLibrary или возврат LoadLibraryEx.
Разгрузки процесса DLL. DLL Разгружен когда процесс завершает или называет функцию FreeLibrary и счет ссылки становится нулем. Если процесс завершается в результате TerminateProcess или функция TerminateThread, система не называет вход-точку функции DLL.

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



Только один резьба за один раз может назвать вход-точку функции.
Система называет вход-точку функции в контексте процесса или резьба, что вызывал функцию, которая нужно быть названа. Это позволяет DLL, чтобы использовать свой вход-точку функции для распределения памяти в виртуальном пространстве адреса вызова процесса или, чтобы открывать ручки доступные в процесс.Вход-точка функции может также распределить память, которая частная в новой резьбе используя локальное хранение резьбы (TLS). Более подробно о локальном хранении резьбы, смотри Локальное Хранение Резьбы.

ФУНКЦИОНАЛЬНОЕ Определение Entry-Point

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

Окно NT: Если точка входа DLL не объявляется правильно, DLL не загружен, и система отображает сообщение, указывающее, что точка входа DLL должна быть объявлена WINAPI.
Окно 95: Если точка входа DLL не объявляется правильно, DLL не загружен и система отображает сообщение назвавшее "Ошибку, начинающую программу,", который указывает потребителя, чтобы проверять файл, чтобы определять проблему.

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

Нагрузки процесса DLL (DLL_PROCESS_ATTACH).
Текущий процесс создает новую резьбу (DLL_THREAD_ATTACH).
Выходы резьбы нормально (DLL_THREAD_DETACH).
Разгрузки процесса DLL (DLL_PROCESS_DETACH).



Следующий пример демонстрирует как в структуру вход-точка функции DLL.

BOOL WINAPI DllEntryPoint( HINSTANCE hinstDLL, // РУЧКА в модуль DLL DWORD fdwReason, // причина разговора функции LPVOID lpReserved ) // зарезервированное
{
// Выполните действия основанные в причине разговора.
ключ( fdwReason )
{
случай DLL_PROCESS_ATTACH:
// Инициализируйтесь как только для каждого нового процесса.
// Обратная ЛОЖЬ, чтобы терпеть неудачу нагрузку DLL.
прерывание;

случай DLL_THREAD_ATTACH:

// Сделайте заправлять-специфической инициализацией.
прерывание;

случай DLL_THREAD_DETACH:
// Сделайте заправлять-специфической очисткой.
прерывание;

случай DLL_PROCESS_DETACH:
// Выполните любую необходимую очистку.
прерывание;
}
возвращайтесь ВЕРНО; // Successful DLL_PROCESS_ATTACH.
}


ФУНКЦИОНАЛЬНАЯ Обратная Величина Entry-Point

Когда вход-точка функции DLL вызван поскольку процесс загружается, функция возвращает ИСТИНУ, чтобы указывать успех. Для процессов, использовавших связь нагрузки-время, обратная величина ЛЖИ заставляет инициализацию процесса, чтобы терпеть неудачу и процесс завершается. Для процессов, использовавших время прогона связи, обратная величина причин ЛЖИ LoadLibrary или функция LoadLibraryEx, чтобы возвращать НЕДЕЙСТВИТЕЛЬНУЮ, указывающую неудачу. Обратная величина входа-точки функции проигнорирована когда функция вызвана к любой другой причине.


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz