【发布时间】:2018-04-19 15:39:43
【问题描述】:
我最近从 vs 2013 转到 vs 2017。我们有这个项目,其中包含以下预处理器定义:
WIN32
DRG_BUILD_DLL
WINVER=0x0600
现在在atlwinverapi.h 中,我收到InitializeCriticalSectionEx 不是全局命名空间成员的错误。任何想法为什么会发生这个问题?
#if (NTDDI_VERSION >= NTDDI_VISTA) && !defined(_USING_V110_SDK71_) && !defined(_ATL_XP_TARGETING)
// InitializeCriticalSectionEx is available in Vista or later, desktop or store apps
return ::InitializeCriticalSectionEx(lpCriticalSection, dwSpinCount, Flags);
【问题讨论】:
-
如果增加
WINVER定义并重建会发生什么?见Modifying WINVER and _WIN32_WINNT。还要确保在"atlwinverapi.h"之前包含"Windows.h",如下所述:InitializeCriticalSectionEx function。 -
@PhilBrubaker 增加
WINVER没有帮助。我已经试过了。我只有atlwinverapi.h作为外部依赖项,所以我不直接包括在内。我检查了atlevent.h并没有包含windows.h -
我看到
"atlwinverapi.h"确实包含"Windows.h"。我怀疑在某处有另一个"WINVER"定义阻止InitializeCriticalSectionEx()函数作为声明公开。 -
您可以使用 Proprocess 到文件功能解决该场景。见这里:-P Preprocess to a File
-
@PhilBrubaker 感谢您的提示,如果解决了会尝试并报告。
标签: c++ sdk visual-studio-2017 atl preprocessor