[整理]DLL延时加载 && 设置进程私有环境变量
DLL延时加载
鉴于静态和动态加载之间,即无需在代码中显示加载但它内队依然是动态加载的方式只是系统帮处理了。
这样做好处是:
1. 可以加快启动时间(因为它是动态加载在需要的时间加载),
2. 减小编写LoadLibrary, GetProcAddress 而像静态库函数一样直接使用.
但他的不足或者说缺陷的地方:
1. 变量不会通过延迟加载方式导出;
2. Kernal32.DLL 无法延迟加载波;
3. 避免在DllMain中使用延尽加载DLL中的库函数.
VS2008延时加载DLL设置
1. 链接器->输入->延迟回载的DLL =>"写入DLL名"”
2. 链接器->高级->延迟加载的DLL =》支持卸载(/Delay:unload)
-----------------------------------------------------------------------
//设置进程私有环境变量
void SetPrivatePathEnvironment() { //获取原环境变量 char* pszPathVal = new char[4096]; memset(pszPathVal, NULL, 4096); DWORD dwRet = GetEnvironmentVariable("path", pszPathVal, 4096); char szpath[MAX_PATH] = {0}; GetModuleFileName(NULL, szpath, MAX_PATH); (strrchr(szpath, '\\'))[0] = 0; (strrchr(szpath, '\\'))[0] = 0; //增加DLL目录 std::string strNewPath(szpath); strNewPath += "\\DLL;"; strNewPath += pszPathVal; //设置新环境变量 if (! SetEnvironmentVariable("path", strNewPath.c_str())) printf("SetEnvironmentVariable failed (%d)\n", GetLastError()); //dwRet = GetEnvironmentVariable("path", pszPathVal, 4096); delete[] pszPathVal; pszPathVal = NULL; }