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 //配置文件路径
);
配置文件截图: