Partilhar via


Usando o Microsoft C Runtime com drivers de User-Mode e aplicativos de área de trabalho

Se você estiver criando aplicativos ou drivers para Windows 10, só precisará ler esta seção. Se você estiver usando uma versão do Visual Studio anterior ao Visual Studio 2015, ignore esta seção e comece com Redistribuir o Runtime C (aplica-se a antes do Visual Studio 2015).

A partir do Visual Studio 2015, o UCRT (Universal C Runtime) abrange o runtime C. As outras peças necessárias para um programa completo (Recursos de Linguagem C/C++, Biblioteca C++) são fornecidas pelo Visual Studio no Redistribuível vc++. Para evitar um requisito de redistribuição de runtime, essas partes são vinculadas estaticamente.

Aviso

Ao criar um projeto de driver de modo de usuário no Visual Studio, se você definir PlatformToolset como WindowsUserModeDriver10.0, o conjunto de ferramentas ignorará qualquer biblioteca de runtime especificada no projeto e, em vez disso, vinculará estaticamente ao Runtime do VC++ e dinamicamente ao UCRT. Ao usar esse conjunto de ferramentas, esse comportamento de vinculação híbrida não pode ser reconfigurado.

Se você não estiver usando o WindowsUserModeDriver10.0 conjunto de ferramentas, use o procedimento a seguir para fazer modificações (por exemplo, incluir outra DLL):

  1. Defina para vincular estaticamente em geral: Propriedades > C/C++ > Biblioteca de Runtime de Geração > de Código = Multi-threaded (/MT)
  2. Remova o UCRT vinculado estaticamente: Propriedades > Entrada > do Vinculador > Ignorar Bibliotecas Padrão Específicas += libucrt.lib
  3. Adicione o UCRT vinculado dinamicamente: Propriedades > Dependências adicionais de entrada > do vinculador > += ucrt.lib, Propriedades > Entrada do Vinculador >> Ignorar Bibliotecas Padrão Específicas += libucrt.lib

Redistribuindo o Runtime C (aplica-se a antes do Visual Studio 2015)

Observação

Todas as informações abaixo desse ponto se aplicam somente ao pré-2015. Antes de 2015, havia duas versões separadas do Runtime C: o VCRT (Runtime do Visual C++, por exemplo msvcr120.dll) e o WINDOWS CRT herdado (msvcrt.dll).

O Visual Studio instala a versão mais recente do VCRT no System32 diretório. Se o arquivo não estiver nesse local, você poderá copiá-lo diretamente para o diretório de build do projeto do Visual C++.

Se o driver do modo de usuário ou o aplicativo da área de trabalho usar o VCRT, você deverá distribuir as bibliotecas de link dinâmico apropriadas. Use o pacote Pacote Redistribuível do Visual C++ (VCRedist_x86.exe, VCRedist_x64.exe, VCRedist_arm.exe). Encadeie o pacote redistribuível com outros binários e o pacote redistribuível receberá atualizações automáticas.

Se você quiser obter isolamento ou evitar a dependência no Redistribuível VC++, poderá vincular estaticamente ao CRT. Embora projetos não driver geralmente possam copiar as DLLs específicas do Visual C/C++ para a pasta local do aplicativo (em que o aplicativo está instalado) para evitar uma dependência no Redistribuível vc++, a implantação local do aplicativo não é apropriada para um driver.

Não copie componentes crt individuais para System32 em vez de usar um pacote redistribuível. Isso pode fazer com que o CRT não seja atendido automaticamente e, potencialmente, seja substituído.

As seguintes considerações especiais se aplicam aos drivers de impressora:

  • Esses drivers devem incluir os arquivos CRT necessários no INF, para que os arquivos CRT sejam copiados para o repositório de driver como parte do conteúdo do driver.
  • Os drivers de impressão V4 não podem usar um co-instalador para instalação, portanto, o INF deve copiar binários relevantes da biblioteca de runtime do C/C++ para o repositório de driver. Para fazer isso, faça referência aos arquivos apropriados na seção [COPY_FILES] do pacote de driver.
  • Os drivers de impressão V3 não devem usar os co-instaladores para instalação, pois não são executados durante as conexões Ponto e Impressão. Esses drivers devem fazer referência aos arquivos apropriados na seção [COPY_FILES] do pacote de driver.

Veja a seguir um exemplo de como incluir os binários CRT na seção [COPY_FILES] de um INF:

[COPY_FILES]
;CRT
Msvcr120.dll
; other files

* [SourceDisksFiles]
Msvcr120.dll = 2 
; other files

* [SourceDisksNames.amd64]
1 = %Location%,,,
2 = %Location%,,,"amd64"

Para drivers UMDF:

  • Vincule estaticamente o driver ao CRT para incluir o runtime no binário. Nesse caso, você não precisa redistribuir o CRT.

Vinculando seu código com as bibliotecas do Runtime C (aplica-se a antes do Visual Studio 2015)

Para determinar de quais DLLs você deve redistribuir com seu aplicativo, colete uma lista das DLLs das quais seu aplicativo depende. Uma maneira de coletar a lista é executar o Dependency Walker (depends.exe).

Para obter mais informações, consulte Determinando quais DLLs redistribuir e escolher um método de implantação.

Não é possível redistribuir todos os arquivos incluídos no Visual Studio; você só tem permissão para redistribuir os arquivos especificados no Código Redistribuível para Visual Studio 2013 Versão Prévia e Visual Studio 2013 Visualização do SDK. As versões de depuração de aplicativos e as várias bibliotecas de link dinâmico do Visual C++ não são redistribuíveis.

As bibliotecas a seguir contêm as funções de biblioteca em tempo de execução C:

Termo Descrição
Msvcr120.dll Runtime C
Msvcp120.dll Runtime do C++
Msvcr120d.dll Versão de depuração do runtime C – nenhuma redistribuição permitida
Msvcp120d.dll Versão de depuração do runtime do C++ – nenhuma redistribuição permitida