在开发软件时,碰到了有一大批的dll需要加载,且这些dll中有隐式链接到其它dll情况.由于某些原因,不能将dll放入系统目录中也不能将他们放置在应用程序同一目录中.
为集中管理,将其放置到应用程序目录下的字目录MyDllPath目录下.
当使用LoadLibrary加载dll时会由于dll中存在隐式链接,且被链接的dll不在当前路径下(在MyDllPath路径下)而导致加载失败的情况.
这时,可以使用GetEnvironmentVariable/SetEnvironmentVariable来调整本应用程序的路径设定.将MyDllPath加载到本应用程序的当前路径中.这样即可正常加载所需要的dll了.
如下是修改当前应用程序目录路径的方法:
BOOL CDemoApp::SetCurrentEnvPath()
{
char chBuf[0x8000]={0};
DWORD dwSize =GetEnvironmentVariable("path",chBuf,0x10000);
CString strEnvPaths(chBuf);
// 将当前路径\dll路径添加到本进程的路径中
if(!::GetModuleFileName(NULL,chBuf,MAX_PATH))
return FALSE;
CString strAppPath(chBuf);
const int nPos = strAppPath.ReverseFind(_T('\\'));
if(nPos>0){
// 路径中包含最后的'\\'
strAppPath = strAppPath.Mid(0,nPos+1);
}
strEnvPaths.TrimRight(";");
strEnvPaths += ";" + strAppPath +"MyDllPath;";
BOOL bR