2011-04-30 16 views
18

Instalé VS2010 después de un bloqueo de unidad, antes tenía VS2005 y todo estaba bien.error C1189 después de instalar Visual Studio 2010

Ahora, al compilar una aplicación C++ que estaba bien anteriormente, estoy viendo un par de errores que no puedo descifrar.

Error 1 error C1189: #error: Este archivo requiere que _WIN32_WINNT esté #definido al menos en 0x0403. Se recomienda un valor de 0x0501 o superior. C: \ Archivos de programa \ 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); 
} 

Si comento hacia fuera las líneas anteriores, que a continuación, obtener

de error El identificador C3861 no se encuentra en la línea 111 a continuación.

Supongo que solo recibo esto porque comento las líneas de arriba?

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

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

    return hRes; 
} 

Agradeceria cualquier ayuda sobre esto. Realmente no desea volver a instalar 2005.

Respuesta

24

Este Microsoft Connect issue tiene esta posible solución:

editar el archivo "stdafx.h" y cambie el valor definido para _WIN32_WINNT y WINVER a 0x0502.

Más discusión aquí sobre este error on the MSDN C++ forum: Problem with older VC Solution.

+0

En lugar de cambiar el archivo del sistema stdafx.h, opté por configurar estos en las definiciones del preprocesador para mis proyectos. Mucho más portátil que retocar los archivos .h del sistema. –

+1

@PeteMagsig: 'stdafx.h' no es un archivo de sistema. Es un código que el asistente de Nuevo Proyecto coloca automáticamente en su proyecto, para ser un punto focal para los encabezados precompilados, pero no se comparte con ninguna otra cosa. (El nombre de archivo es terrible) –

+0

@BenVoigt: Gracias por señalarlo. No me di cuenta de que de ahí venía stdafx.h Todavía estoy a favor de usar definiciones de preprocesador en la configuración del compilador. –

5

Su proyecto apunta a una versión de Windows que ya no es compatible con el compilador más reciente (o cualquier otra cosa).

Debe seleccionar una versión de destino mínima que sea Windows XP ("Windows 5") o posterior.

+0

El compilador no se preocupa realmente, son las bibliotecas las que tienen problemas con las versiones anteriores de Windows. La biblioteca C runtime tiene un par de funciones esenciales que dependen de las características de WinXP para tareas no esenciales, lo que dificulta su eliminación. Pero este problema particular es una dependencia ATL de las funciones introducidas en XP. –

2

Gracias a ambos por las respuestas.

Logré deshacerme del mensaje de error de la siguiente manera. El Context.h se veía como este.

#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> 

moví el 0x0400 #define _WIN32_WINNT para poner fin a continuación, después de toda la incluye, y se compilan Ok. Extraño, pero funcionó.

Sin embargo, lo modificaré a 0x0502 como se sugiere.

gracias

2

Proyecto Propiedad -> Propiedades de Configuración -> C/C++ -> línea de comandos -> Opciones adicionales : añadir este código

/D “_WIN32_WINNT = 0 × 0501”

Si en el servidor de Windows 2003,0 × 0501chagnes a 0 × 0502; si en Windows 7, 0 × 0 × 0501chagnes a 0601

funciona bien

+0

0x0500 funciona también – Kira

Cuestiones relacionadas