The GetModuleHandle function retrieves a module handle for the specified module if the file has been mapped into the address space of the calling process.
To avoid the race conditions described in the Remarks section, use the GetModuleHandleEx function.
HMODULE GetModuleHandle( LPCTSTR lpModuleName );
If this parameter is NULL, GetModuleHandle returns a handle to the file used to create the calling process (.exe file).
If the function succeeds, the return value is a handle to the specified module.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
The returned handle is not global or inheritable. It cannot be duplicated or used by another process.
If lpModuleName does not include a path and there is more than one loaded module with the same base name and extension, you cannot predict which module handle will be returned. To work around this problem, you could specify a path, use side-by-side assemblies, or use GetModuleHandleEx to specify a memory location rather than a DLL name.
The GetModuleHandle function returns a handle to a mapped module without incrementing its reference count. Therefore, use care when passing the handle to the FreeLibrary function, because doing so can cause a DLL module to be unmapped prematurely.
This function must be used carefully in a multithreaded application. There is no guarantee that the module handle remains valid between the time this function returns the handle and the time it is used. For example, a thread retrieves a module handle, but before it uses the handle, a second thread frees the module. If the system loads another module, it could reuse the module handle that was recently freed. Therefore, first thread would have a handle to a module different than the one intended.
For an example, see Using Brushes.
|Client||Requires WindowsÂ XP, WindowsÂ 2000 Professional, WindowsÂ NT Workstation, WindowsÂ Me, WindowsÂ 98, or WindowsÂ 95.|
|Server||Requires Windows ServerÂ 2003, WindowsÂ 2000 Server, or WindowsÂ NT Server.|
Declared in Winbase.h; include Windows.h.
Link to Kernel32.lib.
Implemented as GetModuleHandleW (Unicode) and GetModuleHandleA (ANSI). Note that Unicode support on Windows Me/98/95 requires Microsoft Layer for Unicode.