c++ - sirve - ¿Construir para Windows NT 4.0 usando Visual Studio 2005?
que es visual studio community (5)
Una aplicación MFC que estoy tratando de migrar utiliza afxext.h
, lo que hace que _AFXDLL
se configure, lo que causa este error si configuro /MT
:
Utilice el modificador / MD para compilaciones _AFXDLL
Mi investigación hasta la fecha indica que es imposible construir una aplicación para ejecución en Windows NT 4.0 usando Visual Studio (C ++, en este caso) 2005.
¿Es esto realmente cierto? ¿Hay alguna solución disponible?
Aunque no estoy familiarizado con afxext.h, me pregunto qué pasa si lo hace incompatible con Windows NT4 ....
Sin embargo, para responder a la pregunta original: "Mi investigación hasta la fecha indica que es imposible construir una aplicación para su ejecución en Windows NT 4.0 utilizando Visual Studio (C ++, en este caso) 2005".
La respuesta debería ser sí, especialmente si la aplicación se escribió originalmente o se ejecuta en NT4. Con la cosa afxext.h a un lado, esto debería ser un SÍ fácil.
La otra cosa con la que estoy teniendo problemas es la naturaleza despreocupada en la que las personas están desechando el término NT. De acuerdo, la mayoría de la gente piensa en ''NT'' como Windows NT4 pero sigue siendo ambiguo porque ''la mayoría de las personas'' no es igual a ''todas las personas''.
En realidad, el término ''NT'' es igual a la serie NT. La serie NT es NT3, NT4, NT5 (2000, XP, 2003) y NT6 (Vista).
Win32 es un subsistema que también se dirige a su código C / C ++. Así que no veo ninguna razón por la que uno no deba ser capaz de apuntar a esta plataforma y subsistema NT4 o, si esto es un ejercicio de portar plataforma, elimine las dependencias MFC que VC posiblemente imponga.
Agregando el afxext.h a la mezcla, me suena como un problema de compatibilidad del subsistema. Es parte de MFC de mi investigación de Google. El afxext.h parece ser las extensiones de MFC (Microsoft Foundation Class).
¿Puedes eliminar tu dependencia de MFC? ¿Qué tipo de aplicación es esta? (CLR, servicio, interfaz GUI?) ¿Se puede convertir proyecto en un proyecto C ++ no administrado en VC 8.0?
Con suerte, algo de esto te ayudará.
La idea es que el exe es necesario para vincular a la biblioteca estática.
Pruebe "Propiedades de configuración", "General", "Uso de MFC" para "Usar MFC en una biblioteca estática" "Propiedades de configuración", "General", "Uso de ATL" para "Enlace estático a ATL"
"Propiedades de configuración", "C / C ++", "Generación de código", "Biblioteca de tiempo de ejecución" a "Multi-Threaded (/ MT)"
Máquina de compilación de plataformas de prueba: Visual Studio 2005 en Windows XP SP2 Cliente Máquina: Window XP SP2 (no VS2005 instalado)
La solución alternativa es arreglar el DLL multihilo. Instrucciones simples Breve resumen:
La DLL de biblioteca de tiempo de ejecución 8.0 C (MSVCR80.DLL) no es compatible con NT 4.0 SP6 por una razón y solo una: alguien en Microsoft agregó una llamada de función a
GetLongPathNameW
que no existe en kernel32.dll en NT 4.0.CRTLIB.C En la línea 577, hay una llamada a
GetLongPathNameW
. simplemente reemplázalo con:ret = 0;
solo use esta compilación de MSVCR80.DLL en NT 4.0.
Una vez que tenga a los que trabajan, proponer una solución más genérica debería ser trivial.
No, hay muchas aplicaciones compiladas con VS2005 que deben ser compatibles con Windows XP, 2000, NT, toda la pila. El problema es que (de forma predeterminada) VS2005 quiere usar bibliotecas / exportaciones no presentes en NT.
Vea este hilo para un poco de fondo.
Luego, comience a limitar sus dependencias a través de las macros del preprocesador y evite las API que no son compatibles con NT.
Para deshacerse del error _AFXDLL, ¿ha intentado cambiar la configuración para usar MFC como una lib estática en lugar de una DLL? Esto es similar a lo que ya está haciendo al cambiar las bibliotecas de tiempo de ejecución a static en lugar de DLL.