DLL中如何获取自身的路径
2015-05-01 00:59
2715 查看
问题:DLL中如何获取DLL自身所在的文件夹,而不是主调程序的。用GetCurrentDirectory获取的是exe主调程序所在的目录,不符合我的要求;用GetModuleFileName只能在DllMain中才能获取到,因为DllMain第一个参数hInstance就是DLL模块局并,而GetModuleFileName()只有传入DLL模块句柄才能获取DLL路径。
但是,如果不是DllMain项目,而是Win32
DLL勾选MFC选项的项目,入口函数是int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]),没有DllMain那样的入参hInstance,又该如何获取DLL的模块句柄呢?
方法1:需要传入DLL句柄
使用一个全局变量保存DllMain中的hInstance,然后在你需要的地方传给::GetModuleFileName()。
方法2:需要传入DLL名称
方法3:通用办法
先补充说明一下,VC有三种DLL项目:
(1)MFC扩展DLL (dll被加载自动进入入口函数DllMain,但最好通过导出接口来使用)
(2)Win32标准DLL (dll被加载自动进入入口函数DllMain,但最好通过导出接口来使用)
但是,如果不是DllMain项目,而是Win32
DLL勾选MFC选项的项目,入口函数是int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]),没有DllMain那样的入参hInstance,又该如何获取DLL的模块句柄呢?
方法1:需要传入DLL句柄
使用一个全局变量保存DllMain中的hInstance,然后在你需要的地方传给::GetModuleFileName()。
方法2:需要传入DLL名称
HMODULE hMod = GetModuleHandle(_T("mydll.dll")); if(hMod != NULL) { TCHAR szBuffer[MAX_PATH] = {0}; GetModuleFileName(hMod, szBuffer, sizeof(szBuffer) / sizeof(TCHAR) - 1); }
方法3:通用办法
TCHAR szDLLFolder[MAX_PATH + 1]; GetModuleFileName(AfxGetApp()->m_hInstance, szDLLFolder, MAX_PATH); //或GetModuleFileName(::AfxGetResourceHandle(), szDLLFullPath, MAX_PATH); //或GetModuleFileName(::AfxGetInstanceHandle(), szDLLFullPath, MAX_PATH);
先补充说明一下,VC有三种DLL项目:
(1)MFC扩展DLL (dll被加载自动进入入口函数DllMain,但最好通过导出接口来使用)
extern "C" int APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
(2)Win32标准DLL (dll被加载自动进入入口函数DllMain,但最好通过导出接口来使用)
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )(3)Win32勾选MFC选项DLL(dll被加载不会进入函数_tmain(),只能提供导出接口)
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
相关文章推荐
- 如何获取DLL自身的路径
- DLL中如何获取自身的路径
- 详解在bash脚本中如何获取自身路径
- 在VC中获取当前DLL自身的路径
- dll中如何得到自身路径(指的是dll路径)
- 当程序调用dll时获取dll路径,DLL中获取自身的句柄
- 在DLL中获取自身的路径
- Linux 下当前可执行文件如何获取自身文件名与全路径<转>
- 详解在bash脚本中如何获取自身路径(转)
- C++在dll中获取自身路径(非exe调用路径)
- 详解在bash脚本中如何获取自身路径
- Linux下程序(进程)如何获取自身的绝对路径
- ungui web应用在 ISAPI modules模式下如何获取DLL所在的路径?
- 详解在bash脚本中如何获取自身路径
- 在DLL中如何确定自身的文件路径
- 在bash脚本中如何获取自身路径
- dll获取自身路径的几种方法
- 如何获取dll文件所在路径?
- DLL中如何获取自身的句柄
- 如何获取exe自身所在路径