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.
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database