获取代码运行所在模块的HMODULE/HINSTANCE的句柄值

最近看代码,遇到一个很有趣的问题:如何获取一个静态库代码链接进模块的句柄? 模块句柄值实际上是这个模块加载内存中的基地址。我们暂且放下这个问题,先看看动态库是如何获取句柄值的。 动态库获取句柄值 正常情况下一个动态库dll获取它的句柄,可以通过GetModuleHandle或者GetModuleHandleEx这个API来获取。 这个两个API都需要把dll模块名传进去才能获取句柄值。但是dll可能被人重命名,所以这个方法不一定百分百可靠。 另外一种办法是在DLLMain入口函数里保存hinstDLL值。但是不一定所有的Dll都有Dll,所以这个方法也是不一定百分百可靠。 还有种方法是调用VirtualQuery接口获取MEMORY_BASIC_INFORMATION值: MEMORY_BASIC_INFORMATION结构体里面的MEMORY_BASIC_INFORMATION.AllocationBase就是基地址,可以转换成模块的句柄。这个算是获取Dll句柄的终极办法了。但是这个办法毕竟有些hack,不到万不得已,就别用。 从http://www.codeguru.com/Cpp/W-P/dll/tips/article.php/c3635/... Read More | Share it now!