转:VS2010和VS2008 KB2465361之后,MFC静态链接 EXE体积变大问题

本文提供了解决在使用KB2465361后导致的代码体积增加问题的方法,通过在自己的工程中添加自定义的AfxLoadSystemLibraryUsingFullPath函数来避免引入额外的库文件,最终实现代码体积的正常恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接:http://tedwvc.wordpress.com/2011/04/16/static-mfc-code-bloat-problem-from-vc2010-is-now-in-vc2008-sp1security-fix/

 

大意是:

在KB2465361之后。themehelper.cpp 中调用了afxglobals.cpp中的 AfxLoadSystemLibraryUsingFullPath函数。造成afxglobals.obj 的引入。从而产生代码至少增加1.2M。

解决方法

1.卸载KB2465361,这个方法太弱智了。不小心也许又打上了。

2.在你自己的工程的stdafx.cpp中增加以下代码

// this is our own local copy of the AfxLoadSystemLibraryUsingFullPath function
HMODULE AfxLoadSystemLibraryUsingFullPath(const WCHAR *pszLibrary)
{
WCHAR wszLoadPath[MAX_PATH+1];
if (::GetSystemDirectoryW(wszLoadPath, _countof(wszLoadPath)) == 0)
{
return NULL;
}

if (wszLoadPath[wcslen(wszLoadPath)-1] != L'//')
{
if (wcscat_s(wszLoadPath, _countof(wszLoadPath), L"//") != 0)
{
return NULL;
}
}

if (wcscat_s(wszLoadPath, _countof(wszLoadPath), pszLibrary) != 0)
{
return NULL;
}

return(::AfxCtxLoadLibraryW(wszLoadPath));
}

其实这段代码与afxglobals.cpp中的代码一样。目的只是避免引入afxglobals.obj。

这样,你的程序体积又恢复正常了。减肥成功。。。恭喜恭喜。

 

微软在KB2538241之后已经修复了这个问题。如果以上代码,打了KB2538241之后,会出现link error AfxLoadSystemLibraryUsingFullPath.符号重定义,去掉上述代码即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值