捐助郴维网
感谢您对郴维网的支持,你的支持将是郴维网持续发展的动力!
二维码
×
当前位置:郴维网 >API档案 > 正文
17 2017.06

GetModuleHandle

点击次数:1315 更新时间:2017-6-17 19:36:57  【打印此页

原文链接 -> 传送门

函数功能:

GetModuleHandle 函数用于获取指定模块的句柄,该模块必须已经被调用进程加载。

使用 GetModuleHandleEx 函数来避免出现备注部分所描述的冲突情况。


API 函数原型:

注释:_In_ 说明该参数是输入的。_opt_ 说明该参数是可选的。

HMODULE WINAPI GetModuleHandle(
  _In_opt_ LPCTSTR lpModuleName
);


参数解析:
 

参数

含义

lpModuleName

1. 已被加载的模块的名称(一个 .dll 或 .exe 文件)。如果参数忽略文件的扩展名,则会添上默认链接库扩展名 .dll。文件名字符串可以通过包含尾部点号(.)来表示该模块没有扩展名。文件名字符串不需要指定路径。当指定路径时,确保使用反斜杠(\),而不是斜杠(/)。该文件名字符串(不区分大小写)会与当前映射到调用进程地址空间的模块名字进行比较

2. 如果该参数为 NULL,GetModuleHandle 函数返回用于创建该调用进程的文件的句柄(.exe 文件)

3. GetModuleHandle 函数不会获取以 LOAD_LIBRARY_AS_DATAFILE 标志加载的模块的句柄。更多相关信息,请参见 LoadLibraryEx 函数



返回值:

1. 如果函数调用成功,则返回值为指定模块的句柄;

2. 如果函数调用失败,则返回值为 NULL。

获取有关错误的更多信息,请调用 GetLastError 函数。


备注:

1. 返回的句柄不是全局的,也不是可继承的。它不能被其他进程复制或者使用。

2. 如果 lpModuleName 不包含路径,并且已加载的模块中有几个具有该名称和扩展名,你将不能预料到到底哪一个模块句柄将被返回。为了解决这个问题,你可以使用 side-by-side assemblies 指定一个路径,或者使用GetModuleHandleEx 函数来指定一个内存空间而不是一个 DLL 名称。

3. GetModuleHandle 函数返回映射模块的句柄,但不会增加该模块的引用次数。然而,如果该句柄被传递给 FreeLibrary函数,映射模块的引用次数将减少。因此,不要传递通过 GetModuleHandle 返回的句柄给 FreeLibrary 函数。因为如此做将会导致一个 DLL 模块过早的卸载。

4. 该函数在多线程应用程序中必须小心使用。模块句柄在该函数返回该句柄和使用该句柄之间不能保证一直有效。例如,假设一个线程获取了一个模块句柄,但是在它使用该句柄之前,第二个线程释放了该模块。如果系统加载另外的模块,它会使用最近释放的模块句柄。因此,第一个线程得到的句柄是一个与期望不同的模块的句柄。


需求:
 

Minimum supported client

Windows XP [桌面应用程序]

Minimum supported server

Windows 2003 服务器版 [桌面应用程序]

Header

Winbase.h(包含于 Windows.h)

Library

Kernel32.lib

DLL

Kernel32.dll

Unicode and ANSI names

GetModuleHandleW(Unicode) 和 GetModuleHandleA(ANSI)

提示
郴维网为您提供各类专业服务:
软件开发,电脑配件销售,WIFI路由器销售,上门电脑维修,上门安装系统,系统安装,软、硬件安装,电脑除尘清灰,显示器维修,WIFI安装调试,服务器维护,数据恢复,密码破解,网络布线,网络检修,打印机维修,打印机加碳粉,苹果电脑安装系统,苹果电脑安装双系统,监控安装维护,电脑外包,笔记本电脑维修,餐饮、美容行业软件安装 等。。。。。。
点击次数:1315 更新时间:2017-6-17 19:36:57  【打印此页

上一条:HeapSize

下一条:WinMain

关键词推荐:郴州电脑城 郴州电脑维修公司 维修电脑公司 郴州软件开发 上门电脑维修 上门安装系统 笔记本电脑维修 郴州打印机维修 打印机加碳粉 电脑安装双系统 苹果电脑双系统 液晶显示器维修 联想笔记本维修 联想笔记本维修电话 戴尔笔记本维修电话 郴州戴尔笔记本维修 戴尔笔记本郴州维修点 华硕笔记本维修点 郴州华硕笔记本维修 郴州笔记本上网维修