Macros de configuração C++/WinRT

Este tópico descreve as macros de configuração C++/WinRT. Salvo indicação em contrário, estas regras aplicam-se a todos os macros de configuração C++/WinRT:

  • Todos os ficheiros ligados para formar um único módulo (.exe ou .dll) devem ter definições de macro idênticas. Isso inclui bibliotecas estáticas.
  • Todas as definições de macro devem estar concluídas antes de incluir qualquer ficheiro de cabeçalho C++/WinRT.
  • Não pode alterar nenhuma definição de macro depois de incluir qualquer ficheiro de cabeçalho C++/WinRT.

WINRT_LEAN_AND_MEAN

Se definido, desativa estas funcionalidades raramente usadas (para reduzir os tempos de compilação):

  • A capacidade de implementar interfaces exclusivas fora do componente.
  • Especializações STD::HASH para Apontadores Inteligentes de Interface e Classe de Execução.
  • Suporte para enviar diretamente um hstring ou IStringable para um fluxo C++, desde a versão 2.0.221101.3.

Podes combinar ficheiros com diferentes definições para WINRT_LEAN_AND_MEAN.

Ficheiros que não definem WINRT_LEAN_AND_MEAN acedem às funcionalidades raramente usadas.

WINRT_NO_MODULE_LOCK

Se definido, desativa a contagem de objetos para o módulo atual. O módulo nunca é descarregado a partir do processo. Definir esta macro é habitual para executáveis (que nunca podem ser descarregados), ou para .dlls que pretendes deixar fixados. Não pode ser combinado com WINRT_CUSTOM_MODULE_LOCK.

WINRT_CUSTOM_MODULE_LOCK

Se definido, permite-lhe fornecer a sua própria implementação do winrt::get_module_lock. Não pode ser combinado com WINRT_NO_MODULE_LOCK.

A sua implementação personalizada do winrt::get_module_lock deve suportar as seguintes operações:

  • ++winrt::get_module_lock(): Incremente a contagem de referência no bloqueio do módulo.
  • --winrt::get_module_lock(): Diminuir a contagem de referência no bloqueio do módulo.
  • if (winrt::get_module_lock()): Verifique se o número de referências é diferente de zero. (Necessário se estiveres a construir um DLL.)

WINRT_ASSERT, WINRT_VERIFY

Estas macros permitem-lhe personalizar o tratamento das asserções. WINRT_ASSERT não exige que o argumento seja avaliado. WINRT_VERIFY exige que o argumento seja avaliado, mesmo em builds sem depuração.

Se não personalizares estes macros e _DEBUG estiver definido, então o C++/WinRT torna-os equivalentes a _ASSERTE.

Se não personalizares estas macros e _DEBUG não estiver definida, então o C++/WinRT define WINRT_ASSERT para descartar a expressão não avaliada, e define WINRT_VERIFY para descartar a expressão após a avaliar.

WINRT_NO_MAKE_DETECTION

Se definido, desativa o diagnóstico padrão C++/WinRT que deteta que construiu por engano uma classe de implementação sem usar winrt::make.

Recomendamos fortemente que não definas este símbolo, porque fazê-lo esconde uma fonte comum de erros de programação.

WINRT_NO_SOURCE_LOCATION

Se definido, desativa a inclusão de informações sobre o ficheiro de origem e o número da linha (e, em compilações de depuração, informações sobre a função) na geração de erros.

Esta informação adicional não é usada pelo C++/WinRT, mas está disponível para outras bibliotecas que pretendam interoperar com exceções do C++/WinRT, como a Biblioteca de Implementação do Windows.

Por predefinição, a informação é incluída quando compilado no modo C++20 ou superior. Pode querer suprimir esta informação para reduzir o tamanho binário.

WINRT_DIAGNOSTICS

Se definido, permite que estatísticas internas acompanhem várias operações:

  • O número de vezes que cada interface foi consultada.
  • O número de vezes que cada fábrica foi solicitada (e se a fábrica é ágil).

WINRT_NATVIS

Quando definido, inclui funções auxiliares para ajudar nas visualizações de depuração nativas no Visual Studio. O código não é usado em tempo de execução; Existe apenas para depuração.

Se não personalizar esta macro, então as funções de suporte à visualização ficam ativadas se _DEBUG estiver definida. Para mais detalhes, veja Visual Studio native debug visualization (natvis) para C++/WinRT.

É permitido combinar ficheiros com diferentes definições para WINRT_NATVIS.

Se algum ficheiro for compilado com suporte WINRT_NATVIS , então o módulo resultante terá visualizações nativas de depuração ativadas.

WINRT_EXPORT, WINRT_FAST_ABI_SIZE

Não uses estes macros.