最近有个需要,一个DLL被外部调用,但是DLL内部需要知道DLL所在的路径,网上找到了一种很奇妙的方法,记录之:
HMODULE ModuleFromAddress( PVOID pv )
{
MEMORY_BASIC_INFORMATION mbi;
if(::VirtualQuery(pv, &mbi, sizeof(mbi)) != 0)
{
return (HMODULE)mbi.AllocationBase;
}
else
{
return NULL;
}
}
得到的模块基地址HMOUDULE handle = ModuleFromAddress((PBYTE)ModuleFromAddress)就是模块句柄,蛮实用的,记录下来。再配合GetModuleFileName即可获取完整路径。