使用SetEnvironmentVariable调整应用程序环境变量中的path设置

在处理需要大量DLL且存在隐式链接的软件开发中,由于不能将DLL放在系统目录或应用目录下,选择创建一个子目录MyDllPath来集中管理。通过GetEnvironmentVariable和SetEnvironmentVariable函数更新应用的PATH环境变量,将MyDllPath添加到当前路径,确保LoadLibrary能成功加载依赖的DLL。详细信息可参考MSDN相关文档。
摘要由CSDN通过智能技术生成

在开发软件时,碰到了有一大批的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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值