Cómo: Quitar dependencias en _vcclrit.h

Actualización: noviembre 2007

En Visual C++ .NET y Visual C++ 2003, los archivos DLL compilados con la opción /clr del compilador podían interbloquearse de manera no determinista al cargarse. Este problema se denomina a menudo "problema de bloqueo del cargador" y se describe en detalle en Inicialización de ensamblados mixtos.

Para tratar este problema, en Visual C++ 2003 se proporcionó _vcclrit.h para ayudar a inicializar archivos DLL de manera que se evitase el bloqueo del cargador. Para Visual C++ 2005, la inicialización se controla de forma totalmente distinta con el fin de reducir considerablemente la posibilidad de interbloqueo, por lo que este archivo de encabezado ya no es necesario.

Por compatibilidad con versiones anteriores, _vcclrit.h todavía se incluye y el código que lo utiliza sigue funcionando, pero se ha dejado de utilizar el contenido de _vcclrit.h. Este tema contiene las modificaciones recomendadas requeridas para eliminar la dependencia de este archivo de encabezado.

Nota:

Aunque no es una solución ideal, las advertencias de desuso que resultan de utilizar _vcclrit.h pueden suprimirse definiendo _CRT_VCCLRIT_NO_DEPRECATE antes de incluir _vcclrit.h.

Cambios en la configuración del vinculador

A continuación, se indican los cambios que se deberían realizar para quitar _vcclrit.h de proyectos que empleaban la solución de bloqueo del cargador recomendada en Visual C++ 2003. Todos ellos implican cambios en la configuración del vinculador. Vea Modificar la configuración del proyecto para obtener instrucciones para cambiar esta configuración en Visual Studio.

  • Quite el modificador /NOENTRY del vinculador. El uso de _vcclrit.h requería que se proporcionase el modificador /NOENTRY (Sin punto de entrada) al vinculador. Esto ya no es necesario.

  • No inserte explícitamente MSVCRT.LIB en el vinculador. Dado que se requería el modificador /NOENTRY, era necesario vincular explícitamente con el archivo de biblioteca CRT MSVCRT.LIB. AL quitar /NOENTRY, esta biblioteca se vincula de forma predeterminada en la compilación con /clr.

  • Quite NOCHKCLR.OBJ de la entrada del vinculador. Este archivo ya no es necesario.

  • Quite las referencias forzadas a símbolos. Previamente, era necesario forzar los símbolos siguientes con el modificador /INCLUDE: __DllMainCRTStartup@12, __crt_dll_initialize y __crt_dll_terminate. Ninguno de estos símbolos es necesario en Visual C++ 2005, por lo que se pueden quitar sin ningún riesgo.

Cambios de códigos

Excepto quitar #include <_vcclrit.h> de su código, algunos cambios adicionales pueden ser necesarios dependiendo de la naturaleza del código. Como mínimo, __crt_dll_initialize y __crt_dll_terminate simplemente ya no se invocan y, por tanto, se pueden quitar.

Vea también

Conceptos

Ensamblados mixtos (nativos y administrados)