GetModuleFileName 与 GetCurrentDirectory 的区别很明显就是:
1. GetModuleFileName获得指定模块的详细路径, 包括了文件名和后缀名.
2. GetCurrentDirectory获得本进程的当前工作目录, 注意是工作目录, 不是文件所在目录.
例如: C:/A/test.exe
GetModuleFileName 返回 C:/A/test.exe
GetCurrentDirectory 开始是返回 C:/A/
但此时 test.exe 做了一个选择一个目录并某个保存文件的动作, 例如test.exe有一个功能是导出某些数据到文件的, 此时test.exe调用了文件选择对话框并保存了文件到 D:/B/a.txt中.
此时GetCurrentDirectory 返回的是D:/B/ 而不是C:/A/
如果在DLL中向获得DLL文件详细路径, 只要这样调用即可
char chPath[MAX_PATH];
::GetModuleFileNameA(this->m_hInstance,chPath, MAX_PATH);
this->m_hInstance是DLL的句柄, 在exe中就是exe的句柄.
char chPath[MAX_PATH];
::GetModuleFileNameA(0, chPath, MAX_PATH);
*(::strrchr(chPath, '\\') + 1) = 0;
::strcat(chPath, "aaa.txt");