::GetModuleFileName 获取DLL文件路径
通过GetModuleHandle(NULL, .., .. ); 只能获取到 EXE文件所在路径,如果需要获取DLL路径怎么办?
有如下两种办法:
1. 从DllMain(hModule, …)中获取DLL句柄,并传入GetModuleHandle();
但有些DLL被封装过的很难找到hModule,如: MFC的DLL, vstest的UnitTest DLL 等。
2. 变量 IMAGE_DOS_HEADER __ImageBase 可以转换为 hModule,传入GetModuleHandle()可得到DLL文件路径。
GetDllModulePath
- // from ATL 7.0 sources
- #ifndef _delayimp_h
- extern"C"IMAGE_DOS_HEADER __ImageBase;
- #endif
- void GetDllModulePath()
- {
- HMODULE hModule = reinterpret_cast<HMODULE>(&__ImageBase);
- TCHAR szPathBuffer[256] = { 0 };
- ::GetModuleFileName(hModule, szPathBuffer, MAX_PATH);
- }