Compartilhar via


Como: Remover a dependência no _vcclrit.h

No Visual C++ .NET e Visual C++ 2003, DLLs compiladas com opção do compilador/CLR não deterministicamente poderiam deadlock quando carregado.Esse problema o problema de bloquear do carregador é chamado e é descrito detalhadamente no Inicialização de assemblies mistos.

Para resolver esse problema, _vcclrit.h foi fornecida no Visual C++ 2003 para ajudar a inicializar DLLs de forma a evita o bloquear de carregador.For Visual C++ 2005, a inicialização é tratada de maneira completamente diferente para reduzir drasticamente as chances de deadlock, portanto este arquivo de cabeçalho não é mais necessário.

Para compatibilidade com versões anteriores, _vcclrit.h está ainda incluído e código que usa ele continuará a funcionar, mas o Sumário de _vcclrit.h uso.Este tópico contém as modificações recomendadas necessárias para remover a dependência desse arquivo de cabeçalho.

Observação:

Embora não uma solução ideal, os avisos de substituição que resultado do uso _vcclrit.h suprimido, definindo _CRT_VCCLRIT_NO_DEPRECATE antes do incluindo _vcclrit.h.

Alterações de configuração de vinculador

Estas são as alterações que devem ser feitas para remover _vcclrit.h de projetos que empregava a solução recomendada de bloquear de carregador Visual C++ 2003.Todos eles envolvem alterações nas configurações do vinculador.See Modificando Configurações do Projeto Para obter instruções sobre como alterar essas configurações por meio do Visual Studio.

  • Remova comutador de vinculador /NOENTRY.Usar _vcclrit.h necessário que o /NOENTRY (nenhum ponto de entrada) comutador ser fornecido para o vinculador. Isso não é mais necessário.

  • Não explicitamente entrada MSVCRT.LIB para o vinculador.Como o comutador /NOENTRY era necessário, era necessário explicitamente link para o arquivo de biblioteca do CRT MSVCRT.LIB.Com /NOENTRY removido, esta biblioteca está vinculada por padrão em/CLR compilação.

  • Remova NOCHKCLR.OBJ da entrada do vinculador.Este arquivo não é mais necessário.

  • Remova referências de símbolo forçada.Anteriormente, era necessário, para forçar os símbolos a seguir com comutador /include: __DllMainCRTStartup@12, __crt_dll_initialize e __crt_dll_terminate.Nenhum desses símbolos é necessária em Visual C++ 2005, para que eles possam ser removidos com segurança.

Alterações de código

Diferente de remoção # incluem <_vcclrit.h> do seu código, algumas alterações adicionais podem ser necessárias dependendo da natureza do seu código.No mínimo, __crt_dll_initialize __crt_dll_terminate simplesmente não mais será chamado e, portanto, pode ser removida.

Consulte também

Conceitos

Misto (nativo e gerenciado) assemblies