安装Visual Studio 2010后出现错误C1189

时间:2011-04-30 03:31:48

标签: c++ visual-studio-2010

我在驱动器崩溃后安装了VS2010,之前我有VS2005,一切都很好。

现在编译一个以前很好的C ++应用程序,我看到了一些我无法弄清楚的错误。

  

错误1错误C1189:#error:此文件要求_WIN32_WINNT #defined至少为0x0403。建议值为0x0501或更高。 C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ atlmfc \ include \ atlcore.h 35 1 BIOXGINA

#ifndef __ATLCORE_H__
#define __ATLCORE_H__

#pragma once

#ifdef _ATL_ALL_WARNINGS
#pragma warning( push )
#endif

#pragma warning(disable: 4786) // identifier was truncated in the debug information
#pragma warning(disable: 4127) // constant expression

#include <atldef.h>
#include <windows.h>
#include <ole2.h>

#include <limits.h>
#include <tchar.h>
#include <mbstring.h>

#include <atlchecked.h>
#include <atlsimpcoll.h>

34.  #if _WIN32_WINNT < 0x0403
35.  #error This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended.
36.  #endif

#pragma pack(push,_ATL_PACKING)
namespace ATL
{
/////////////////////////////////////////////////////////////////////////////
// Verify that a null-terminated string points to valid memory
inline BOOL AtlIsValidString(
_In_z_count_(nMaxLength) LPCWSTR psz,
_In_ size_t nMaxLength = INT_MAX)
{
(nMaxLength);
return (psz != NULL);
}

如果我注释掉上述内容,我就会

  

错误C3861下面第111行未找到标识符。

我认为我只是得到这个,因为我评论了以上几行?

HRESULT Init() throw()
{
    HRESULT hRes = S_OK;

111.        if (!InitializeCriticalSectionAndSpinCount(&m_sec, 0))
    {
        hRes = HRESULT_FROM_WIN32(GetLastError());
    }

    return hRes;
}

我将不胜感激。真的不想重新安装2005.

4 个答案:

答案 0 :(得分:24)

这个Microsoft Connect issue有这个潜在的解决方案:

  

编辑文件“stdafx.h”并将为_WIN32_WINNT和WINVER定义的值更改为0x0502。

此处有关此error on the MSDN C++ forum: Problem with older VC Solution的更多讨论。

答案 1 :(得分:5)

您的项目的目标是较新的编译器(或其他任何东西)不再支持的Windows版本。

您必须选择Windows XP(“Windows 5”)或更高版本的最低目标版本。

答案 2 :(得分:2)

谢谢你们的回复。

我设法摆脱了错误信息,如下所示。 Context.h看起来很喜欢这个。

  #pragma once

  #define _WIN32_WINNT 0x0400

  #include <windows.h>
  #include <winwlx.h>
  #include <ObjBase.h>
  #include <comdef.h>
  #include <atlbase.h>

  extern CComModule _Module;

  #include <atlcom.h>
  #include <vector>

我将#define _WIN32_WINNT 0x0400移动到所有包含后结束,然后编译好了。奇怪,但它奏效了。

我会按照建议将其改为0x0502。

感谢

答案 3 :(得分:2)

项目属性 - &gt;配置属性 - &gt; C / C ++ - &gt;命令行 - &gt;其他选项 :添加此代码

/ D“_WIN32_WINNT = 0×0501”

如果在Windows server 2003,0×0501chagnes为0×0502; 如果在Windows 7中,0×0501变为0×0601

运作良好