当一个文件被映射到调用进程的地址空间时,GetModuleHandle函数得到其中某一模块的句柄。
使用GetModuleHandle函数格式:
HMODULE GetModuleHandle( LPCTSTR lpModuleName);
参数 lpModuleName:
[in]用指针指向一个包含模块名以NULL字符结尾的串,模块是.dll或.exe文件。如果文件扩展名省略,则增加默认的扩展名.dll。文件名串可 以是省略号(...),表示模块名没有扩展名。这个串不是必须指定一个路径。当指定一个路径时,确定要用反斜线(/),而不是斜线(/)。这个模块名将和 当前映射到调用进程地址空间的模块名进行独立地比较。 假如这个参数是NULL,函数将返回创建调用进程(.exe文件)的文件的句柄。
返回值:
如果函数调用成功,返回值是某一模块的句柄。 如果函数调用失败,返回NULL。要得知更多的出错信息,调用GetLastError。
注释:
返回句柄不是全局的或可继承的。它不能被其它进程复制或使用。 假如lpModuleName没有包含路径,而且有多个相同的文件名和扩展名,将不能预 测返回哪一个模块的句柄。要解决这个问题,需要指定路径。用side-by-side assemblies指定,或用GetModuleHandleEx来指定一个内存区而不是一个DLL名。 GetModuleHandle函数对一个 映像的模块返回一个句柄,而不会增加引用(reference)数。然而,在传递这个句柄给FreeLibrary函数时,要当心,因为,这样传递会导致 一个DLL模块过早地不能被映像。 这个函数在多线程程序中必须谨慎使用。不能保证这个模块句柄在函数返回时和使用时是有效的。比如,一个线程得到模块 句柄,但在使用这个句柄之前,第二个线程释放了这个模块。假如这个系统载入另一个模块,它可以再次使用最近释放了的句柄。然而,第一个线程拥有一个模块的 句柄,这个模块不同于先前那个模块。
GetModuleHandle函数
最新推荐文章于 2020-08-21 11:20:01 发布