如何增加HMODULE
返回的GetModuleHandle
的引用计数?我可以DuplicateHandle
,或者我需要通过跳,检索模块的路径然后LoarLibrary
在该路径上?简而言之,我想在不使用此函数(即XP +)的情况下模拟GetModuleHandleEx
。
答案 0 :(得分:1)
您不能在HMODULE上使用DuplicateHandle()。 MSDN Library article列出了DH在备注部分中接受的句柄类型,模块句柄不是其中之一。
这样做的一个原因是HMODULE实际上根本不是句柄,它是伪句柄。这背后的历史可以追溯到他们实际处理的16位版本的Windows。但是在32位版本中消失了,它们现在只是模块的地址,它被加载到内存中。将代码地址转换为模块句柄的一个非常标准的技巧是使用VirtualQuery()并将返回的MEMORY_BASIC_INFORMATION.BaseAddress强制转换为(HMODULE)。非常方便。
是的,增加引用计数的唯一方法是使用LoadLibrary()。