GetModuleFileName() 函数返回当前进程已加载可执行或DLL文件的完整路径名(以’\0’终止),该模块必须由当前进程地址空间加载。若要获取另一个已加载模块的文件路径,可以使用GetModuleFileNameEx()函数。
DWORD WINAPI GetModuleFileName(
_In_opt_ HMODULE hModule, //应用程序或DLL实例句柄,NULL则为获取当前程序可执行文件路径名
_Out_ LPTSTR lpFilename, //接收路径的字符串缓冲区
_In_ DWORD nSize //接收路径的字符缓冲区的大小
);
注意:
MAX_PATH宏为编译器所支持的最长全路径名的长度,VC++6.0下为260。
'\\'即为'\'。
例:
void CTestIMC3MoveDlg::GetAppFilePath(CString& strPath)
{
GetModuleFileName(NULL, strPath.GetBufferSetLength(MAX_PATH+1), MAX_PATH);
strPath.ReleaseBuffer();
int nPos = strPath.ReverseFind('\\');
strPath = strPath.Left(nPos);
}
调用:
CString sPath;
GetAppFilePath(sPath);
CString strDllName = sPath + _T("\\ImcMoveCard4.dll");
另外:
MFC中CFile类的成员函数:CFile::GetFilePath(); //获取指定文件所在的目录
HMODULE GetModuleHandle(LPCTSTR lpModuleName)返回加载到当前进程地址空间的可执行文件或DLL文件的句柄,若参数为NULL,则返回当前进程的句柄(当前应用程序实例句柄)