【发布时间】:2012-10-25 08:40:16
【问题描述】:
我正在使用 Visual Studio 2012 构建现有的 MFC 应用程序。该应用程序使用 "RichEdit20A" 控件和继承 CRichEditCtrl 的自定义控件。
在InitInstance() 期间,应用程序调用::AfxInitRichEdit2(),后者又调用AtlLoadSystemLibraryUsingFullPath(L"RICHED20.DLL"),后者又调用LoadLibraryExW(pszLibrary, NULL, LOAD_LIBRARY_SEARCH_SYSTEM32)。后一个调用失败并返回NULL。 GetLastError() 返回 87(参数不正确)。这发生在 Win7 x64 和 Win8 x64 上。
失败的调用似乎是在 Visual Studio 2012 运行时中引入的(它在条件 #if NTDDI_VERSION >= NTDDI_WIN8 中)。该应用程序在使用 Visual Studio 2008 构建时运行良好。
有谁知道为什么会发生这种情况以及如何解决(或解决)这个问题?或者,有没有办法“恢复”运行时以使用旧的加载行为?
【问题讨论】:
-
您是否确认系统上存在RICHED20.DLL?
-
尝试将
WINVER设置为 0x600 或升级前的任何值。如果你在 VS 2012 中创建了一个新项目,你可能最终会得到一个针对 Windows 8 的项目。更改它我targetver.h! -
@Lynn Crumbling 是的,RICHED20.DLL 存在。
-
@l33t 我相信当前形式的项目是用 VS2008 创建的(虽然不是我)。我们没有 targetver.h,但它有一个
#define _WIN32_WINNT _WIN32_WINNT_WINXP。
标签: visual-c++ mfc visual-studio-2012 cricheditctrl