Bibliotecas de abrangência do Windows

Importante

As informações neste tópico se aplicam a todas as versões do Windows 10 e posteriores. Vamos nos referir a essas versões aqui como "Windows", destacando quaisquer exceções quando necessário.

Uma biblioteca de guarda-chuva é uma única biblioteca que você vincula e que abrange um subconjunto selecionado de APIs Win32. Por exemplo, uma biblioteca de guarda-chuvas chamada OneCore.lib abrange o subconjunto de APIs Win32 que são comuns a todos os dispositivos Windows.

As APIs de uma biblioteca abrangente podem ser implementadas em vários módulos (em que um módulo é um conjunto de APIs ou uma DLL). Mas a biblioteca abrangente oculta esse detalhe para você, tornando seu aplicativo mais portátil entre diferentes versões do sistema operacional. Em seu aplicativo para desktop ou driver, vincule a biblioteca abrangente que cobre o conjunto de APIs do seu interesse, e isso é tudo o que você precisa fazer.

O que uma biblioteca de guarda-chuvas cobre

Uma biblioteca de guarda-chuva abrange um subconjunto selecionado de APIs. Não é um índice completo de cada API em cada módulo do qual ela se baseia, e uma determinada API não está necessariamente presente em todas as bibliotecas de guarda-chuva.

O conjunto de APIs que uma biblioteca abrange também é específico para a versão do SDK Windows que você cria. Um SDK posterior pode adicionar cobertura que uma anterior não tem.

Por essas duas razões, considere a página de referência de uma API específica como a principal autoridade sobre qual biblioteca vincular. A tabela Requisitos nessa página nomeia a biblioteca para essa API.

Bibliotecas disponíveis

Biblioteca Descrição
OneCore.lib Aborda o subconjunto de APIs Win32 que são comuns a todos os dispositivos Windows. Vincule OneCore.lib (e nenhuma outra biblioteca abrangente do Win32) para acessar essas APIs. Se você vincular OneCore.lib e chamar apenas as APIs Win32 abrangidas por ele, então seu aplicativo de desktop ou driver serão carregados com êxito em todos os dispositivos Windows.
OneCore_apiset.lib A variante do conjunto de APIs de OneCore.lib. Quando um nome de conjunto de API está disponível para uma API, ele é resolvido por meio de uma importação direta do conjunto de API, portanto, nenhum módulo de encaminhador intermediário está envolvido no momento da carga. Um binário que se vincula a eles não tem garantia de execução como está em versões do Windows lançadas antes dos conjuntos de APIs importados.
OneCoreUAP.lib Aborda o subconjunto de APIs Win32 comuns a todos os dispositivos Windows que dão suporte ao Windows Runtime (WinRT). Vincule OneCoreUAP.lib (e nenhuma outra biblioteca abrangente do Win32) para acessar essas APIs. Se você vincular OneCoreUAP.lib e chamar apenas as APIs Win32 que ele oferece, seu aplicativo para desktop ou driver é carregado com êxito em todos os dispositivos Windows que dão suporte ao WinRT.
OneCoreUAP_apiset.lib A variante do conjunto de APIs de OneCoreUAP.lib. Quando um nome de conjunto de API está disponível para uma API, ele é resolvido por meio de uma importação direta do conjunto de API, portanto, nenhum módulo de encaminhador intermediário está envolvido no momento da carga. Não há garantia de que um binário vinculado a isso funcione como está em versões do Windows lançadas antes dos conjuntos de APIs que ele importa.

Não combine duas dessas bibliotecas em um binário. Cada um existe para limitar seu binário a uma superfície de API específica e vincular uma segunda biblioteca pode associá-lo a APIs fora dessa superfície.

Escolhendo entre uma biblioteca e sua variante do conjunto de API

Para uma API à qual ambas as variantes dão suporte, as duas chegam à mesma implementação em tempo de execução. O que difere é o nome que acaba indo para a tabela de importação do seu binário e, portanto, o intervalo de versões do Windows nas quais o binário pode ser executado.

  • Vincule a biblioteca simples (OneCore.lib, OneCoreUAP.lib) quando você precisar de um único binário que também seja executado em versões de Windows lançadas antes que os conjuntos de API relevantes existam. Ele importa nomes de módulo de Windows herdados e o encaminhamento reverso redireciona essas importações em edições que não carregam mais os módulos originais.
  • Vincule a variante do conjunto de APIs (OneCore_apiset.lib, OneCoreUAP_apiset.lib) quando seu binário tiver como destino as versões atuais do Windows. Ele prefere um nome de API set sempre que houver um disponível para a API, para que a importação seja resolvida diretamente para o binário correspondente que hospeda a implementação, sem nenhum redirecionador no meio. Essa é a forma mais eficiente. Quando nenhum nome de conjunto de API se aplica, ele usa o nome do módulo, o mesmo que a biblioteca simples.

Nenhuma das opções altera quais APIs você pode chamar. Ele altera a forma como suas importações são nomeadas e até mesmo até que versão seu binário pode ser executado.

Consulte também