Håv*_*d S 2 mfc visual-c++ cricheditctrl visual-studio-2012
我正在使用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构建时,应用程序运行正常.
有谁知道为什么会发生这种情况以及如何解决(或解决)这个问题?或者,有没有办法"恢复"运行时使用旧的加载行为?
选择正确的目标Windows版本非常重要.就在这里,如果你没有自己明确地设置它,那么Visual Studio假定你将定位最新和最好的.哪个是适用于VS2012的Windows 8.
其中包括LoadLibraryEx()的新选项,LOAD_LIBRARY_SEARCH_SYSTEM32选项.在Windows 8上可用,但如果您在Windows Vista,7或2008上使用它,则需要安装安全补丁.这是非常关键的一个,显然您没有安装它.
如果您希望程序与旧版本或未修补的Windows版本兼容,则需要更改目标.这通常targetver.h由头文件完成,假设您的MFC项目是由相对较新的向导生成的.像这样修改它:
#pragma once
// Including SDKDDKVer.h defines the highest available Windows platform.
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
#define _WIN32_WINNT _WIN32_WINNT_WINXP // NOTE: added
#include <SDKDDKVer.h>
Run Code Online (Sandbox Code Playgroud)
如果你没有targetver.h,那么把它放在#include之前的任何地方<windows.h>.根据需要调整值.请注意,VS2012目前不支持XP,但稍后会支持.
| 归档时间: |
|
| 查看次数: |
1561 次 |
| 最近记录: |