C++如何获取dll自身模块路径

第一种:

首先在dllmain中保存HMODULE
然后使用GetModuleFileName(HMODULE)
这是一个比较简单直接的方案,但是dll如果内存加载(也就是dllmain无法被正确调用的时候)就无法使用了。

第二种:

通过GetModuleHandleEx传入dll的名称获取其HMODULE
多个装载的模块具有相同的基本名称和扩展名时GetModuleHandleEx无法预测返回
哪个模块的句柄:https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-getmodulehandleexa

第三种:

通过函数地址获取其模块句柄
HMODULE GetSelfModuleHandle() {
  MEMORY_BASIC_INFORMATION mbi;
  return ((::VirtualQuery(GetSelfModuleHandle, &mbi, sizeof(mbi)) != 0)    
  (HMODULE)mbi.AllocationBase : NULL);
}
GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
                (LPCSTR)&XXX, //可以是任何函数,全局变量等的地址
         &hModule);

第四种:

(HINSTANCE)&__ImageBase
然后使用GetModuleFileName(HMODULE)

本文为@艺文笔记原创文章,转载请注明出处:https://www.xuwenyan.com/archives/43,非常感谢!
上一篇:  已是最后文章