2008-08-03 14 views
17

Una aplicación MFC que estoy tratando de migrar utiliza afxext.h, lo que provoca _AFXDLL para ponerse, lo que hace que este error si fijo /MT:¿Construir para Windows NT 4.0 usando Visual Studio 2005?

Utilice el interruptor de encendido/MD para _AFXDLL construye

Mi investigación hasta la fecha indica que es imposible construir una aplicación para ejecución en Windows NT 4.0 utilizando Visual Studio (C++, en este caso) 2005.

¿Es esto realmente cierto? ¿Hay alguna solución disponible?

+1

Alguien por favor pro infórmate sobre esto –

Respuesta

8

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.

Consulte this thread para obtener más información.

Luego, comience a limitar sus dependencias a través de las macros del preprocesador y evite las API que no son compatibles con NT.

+0

Lo que hace que este problema resulte confuso es que si tiene un enlace estático, solo los archivos de objeto necesarios para los símbolos que utiliza se insertan, por lo que parece funcionar en NT4 la mayor parte del tiempo. –

4

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.

1

Aunque no estoy familiarizado con afxext.h, me pregunto lo que al respecto hace que sea 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 usando Visual Studio (C++, en este caso) 2005. "

¡La respuesta debería ser sí, especialmente si la aplicación se escribió originalmente o se está ejecutando 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 suelta 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++. Por lo tanto, no veo ninguna razón por la que no se pueda apuntar a este subsistema plataforma NT4 & o, si se trata de 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).

¿Se puede eliminar su 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?

Espero que algo de esto te ayude.

3

La solución consiste en reparar la DLL de subprocesos múltiples. Simple instructions.Breve resumen:

El envío de 8,0 C Runtime Library DLL (Msvcr80.dll) no admite NT 4.0 SP6 por una razón y una razón solamente: alguien en Microsoft añadió una llamada de función a la que GetLongPathNameW no existe en kernel32.dll en NT 4.0.

CRTLIB.C En la línea 577, hay una llamada al GetLongPathNameW. simplemente reemplácelo por: ret = 0; solo use esta compilación de MSVCR80.DLL en NT 4.0.

Una vez que tenga esos que funcionan, proponer una solución más genérica debería ser trivial.

-1

La idea es que el exe es necesario para vincular a la biblioteca estática.

Inténtelo este "Propiedades de configuración", "General", "El uso de MFC" a "Utilizar MFC en una biblioteca estática" "Propiedades de configuración", "General", "Uso de ATL" a "estática de enlaces a ATL"

"Propiedades de configuración", "C \ C++", "Generación de código", "Biblioteca de tiempo de ejecución" en "Multi-roscado (\ MT)"

Plataforma de Pruebas Construir máquina: Visual Studio 2005 en Windows XP SP2 Cliente Máquina: Windows XP SP2 (no VS2005 instalado)

Cuestiones relacionadas