ошибка C1189 после установки Visual Studio 2010 - PullRequest
18 голосов
/ 30 апреля 2011

Я установил VS2010 после аварии диска, до этого у меня был VS2005, и все было хорошо.

Теперь при компиляции приложения на C ++, которое раньше было хорошо, я вижу пару ошибок, которые просто не могу понять.

Ошибка 1, ошибка C1189: #error: Этот файл требует, чтобы _WIN32_WINNT # был определен, по крайней мере, 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 ]

24 голосов
/ 30 апреля 2011

Эта проблема Microsoft Connect имеет следующее потенциальное решение:

отредактируйте файл "stdafx.h" и измените значение, определенное для _WIN32_WINNT и WINVER, на 0x0502.

Подробнее об этой ошибке на форуме MSDN C ++: проблема со старым VC-решением .

5 голосов
/ 30 апреля 2011

Ваш проект нацелен на версию Windows, которая больше не поддерживается новым компилятором (или чем-то еще).

Вы должны выбрать минимальную целевую версию Windows XP («Windows 5») или более позднюю.

2 голосов
/ 19 мая 2013

Свойство проекта -> Свойства конфигурации -> C / C ++ -> Командная строка -> Дополнительные параметры: добавьте этот код

/ D «_WIN32_WINNT = 0 × 0501»

, если в Windowsсервер 2003,0 × 0501chagnes до 0 × 0502 ;, если в Windows 7 , 0 × 0501chagnes до 0 × 0601

хорошо работает

2 голосов
/ 01 мая 2011

Спасибо вам обоим за ответы.

Мне удалось избавиться от сообщения об ошибке следующим образом.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, чтобы затем завершить его после всех включений, и он скомпилирован Ok.Странно, но это сработало.

Однако я изменю его на 0x0502, как предложено.

спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...