1.获取当前dll或者exe的路径:方法一、void GetNowDllPath(CString & strPath){ Char szPath[100]={0}; CWinApp *pApp = AfxGetApp(); //szPath结果看下面示例截图,一目了然;pApp->m_hInstance为当前模块的句柄 GetModuleFileName(pApp? pApp->m_hInstance: NULL, szPath, sizeof(szPath)); Char *pDest = strrchr(szPath, ‘\\’);//找到字符串szPath中最后一个单斜线的位置 If(pDest != NULL) { *pDest = ‘\0’;//最后一个单斜线的位置,置为结束符 } strPath = szPath;} 方法二、void GetNowDllPath(CString & strPath){ char szPath[260]={0}; GetCurrentDirectory(511,szPath); CString dllHome; dllHome = szPath; int p1 = dllHome.ReverseFind('/'); int p2 = dllHome.ReverseFind('\\'); int pos = max(p1,p2); if(pos > 0) dllHome = dllHome.Left(pos+1); strPath = dllHome;} GetModuleFileName 与 GetCurrentDirectory 区别: GetModuleFileName 函数指定当前进程模块的路径.它仅仅操作当前进程下的模块.如果想获取其他进程下的模块信息, 则需使用 GetModuleFileNameEx 函数。 GetCurrentDirectory 返回当前进程的当前目录,并不一定返回你的应用程序的目录。如果你在应用程序中调用了打开文件对话框,你选择了一个文件,那么,这个文件所在的目录就成了当前进程的当前目录了。 2.获取当前DLL下配置文件的信息: CString HomePath; GetNowDllPath(HomePath); CString InitPath = HomePath + “\\scistock.ini”; Char g_szMongoDBHost[128]={0}; Int g_nMongoDBPort = 0; GetPrivateProfileString(“MongoDB”, ”HOST”, “127.0.0.1”, g_szMongoDBHost , 128, IniPath); g_nMongoDBPort = GetPrivateProfileInt(“MongoDB”, “PORT”, 27017, IniPath);
示例图片:
GetPrivateProfileString、GetPrivateProfileInt的原型:DWORD GetPrivateProfileString(LPCTSTR lpAppName, //配置文件的section名LPCTSTR lpKeyName, //配置文件的key名LPCTSTR lpDefault, //默认返回值LPTSTR lpReturnedString, //返回值DWORD nSize, //返回值最大长度LPCTSTR lpFileName //配置文件路径); UINT WINAPI GetPrivateProfileInt(_In_LPCTSTR lpAppName, //配置文件的section名_In_LPCTSTR lpKeyName, //配置文件的key名_In_INT nDefault, //默认返回值_In_LPCTSTR lpFileName //配置文件路径);
配置文件截图: