2010-09-14 13 views
7

Windows SDK está instalado. Construí N ++ con éxito con Visual C++ 2008 Express antes. Pero ahora, con 2.010 Tengo un montón de mensajes de error sobre sprintf_s:¿Cómo construyo Notepad ++ con Visual C++ 2010 Express?

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\string(676): error C2039: 'sprintf_s' : is not a member of '`global namespace'' 
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\string(676): error C3861: 'sprintf_s': identifier not found 

por favor ayuda.

Respuesta

20

Hay una hoja de propiedades incluida con el proyecto llamado no_ms_shit.props (después de la conversión). Hay una buena cantidad de odio expresado en esa hoja por lo que MS ha estado tratando de hacer durante los últimos 5 años.

Se pasaron de la raya al apagar todo, incluso deshabilitaron la vinculación a sprintf_s(). Cuál es la fuente de su error, el encabezado stdio.h omite la declaración pero el encabezado de cadena lo usa. No estoy seguro si la edición Express es compatible con las hojas de propiedades del proyecto de edición, pero el paso en el detalle de la edición son:

  • Ver + Administrador de propiedades
  • Abra uno de los nodos y localizar "ninguna mierda ms"
  • Derecho -clic ella, Propiedades
  • C/C++, preprocesador, definiciones del preprocesador
  • Cambio __STDC_WANT_SECURELIB__=0-1
  • Añadir _CRT_SECURE_NO_WARNINGS a esas definiciones

El proyecto compila limpio ahora. Obtengo un error de compilación para copiar archivos, es un evento posterior a la construcción. Comience otra pregunta si no puede encontrar la manera de solucionarlo.

+0

¡Gracias! De hecho, Express Edition no tiene Property Manager. Pero he encontrado dónde cambiar estos ajustes del preprocesador (Proyecto + Propiedades + Propiedades de configuración ...). Se construye ahora. – thorn

+1

¿Cómo se soluciona el error de compilación al copiar archivos? – Phillip

4

Extraño. Tengo Visual Studio 2010 Ultimate e incluso no me permite acceder al elemento de menú Ver-> Páginas de propiedades. Está deshabilitado para mí.

Pero acabo de ir al archivo no_ms_shit.props y lo edité en Notepad ++ solamente :). Luego se dirigió a Proyecto-> Propiedades-> Propiedades de configuración-> General, y seleccionó 'No' para tratar advertencias como Errores, y agregó _CRT_SECURE_NO_WARNINGS en las definiciones del preprocesador.

Don Ho debería ir con la corriente que maldecir la mierda ms cuando está desarrollando en Windows y Visual Studio.


Esto funcionó para mí cuando se utiliza Visual Studio 2012 Profesional: (! * .vsprops, no sólo .props *)

  • Tiene que editar no_ms_shit.vsprops:
    Reemplazar __STDC_WANT_SECURE_LIB__=0 por __STDC_WANT_SECURE_LIB__=1

  • Agregar _CRT_SECURE_NO_WARNINGS a las definiciones del preprocesador.

+0

Esta respuesta me ayudó en VS2010. – Myanju

2

Una mirada más cercana a la fuente mostraría que la mayoría de las llamadas a las bibliotecas que causan ruido interminable a menos que utilice esta hoja de propiedades, vienen del proyecto SciLexer.dll. Scintilla es multiplataforma, por lo que no necesita todos los cruft específicos de Windows.Como mencionaste, Microsoft se fue por la borda con su reemplazo de la biblioteca de cadenas estándar, por más legítimo que sea su intento de evitar sobrepasamientos de búfer.

Así que puede dirigir esta crítica a Neil Hodgson (desarrollador principal de Scintilla) en lugar de Don Ho.

CChris

Cuestiones relacionadas