KB2465361 补丁导致 VS08 编译 MFC 体积增大

微软的 KB2465361 补丁导致 VS08 编译出来的 MFC 体积明显的增大。发现这个问题是在编译 fHash 的时候,原来只有 297KB 的 Release Build 一下子变成了 2MB 多,一开始还以为是我自己修改了代码所致,但是仔细查看变大前后的代码,没有可能会导致体积明显变化的修改。用 Dependency Walker 查看后发现,新的二进制链接了 gdiplus.dll 等一堆新的链接库,而代码中根本就没有用到它们。

仔细想想和上一次编译之间唯一的变化就是安装了 KB2465361 补丁。上网查了一下,有这一篇博客确认了这个问题,并提出了解决方法。

1) open up your stdafx.cpp from your project
2) paste the following code after the #include "stdafx.h"

// 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));
}

3) Rebuild your app, and voila, it’s all better now.

照做之后,重新编译,体积又回到了正常的 297KB,gdiplus.dll 之类的多余库也不再被链接进来。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>