Partilhar via


Macros de configuração do C++/WinRT

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

  • Todos os arquivos que estão vinculados para formar um único módulo (.exe ou .dll) devem ter configurações de macro idênticas. Isso inclui as bibliotecas estáticas.
  • Todas as configurações de macro devem ser concluídas antes de incluir qualquer arquivo de cabeçalho do C++/WinRT.
  • Você não poderá alterar nenhuma configuração de macro depois de incluir qualquer arquivo de cabeçalho do C++/WinRT.

WINRT_LEAN_AND_MEAN

Se definida, desabilita esses recursos raramente usados (para reduzir os tempos de compilação):

  • A capacidade de implementar interfaces exclusivas fora do componente.
  • As especializações std::hash para apontadores inteligentes de interface e runtime da classe.
  • Suporte para gerar diretamente um hstring ou IStringable para um fluxo C++, desde a versão 2.0.221101.3.

Você tem permissão para combinar arquivos com configurações diferentes na WINRT_LEAN_AND_MEAN.

Arquivos que não definem WINRT_LEAN_AND_MEAN obtêm acesso aos recursos raramente usados.

WINRT_NO_MODULE_LOCK

Se definida, desabilita as contagens de objetos para o módulo atual. O módulo nunca é descarregado do processo. A definição dessa macro é personalizada para executáveis (que nunca podem ser descarregados) ou para .dlls que você pretende deixar fixadas. Não pode ser combinada com WINRT_CUSTOM_MODULE_LOCK.

WINRT_CUSTOM_MODULE_LOCK

Se definida, permite que você forneça sua própria implementação de winrt::get_module_lock. Não pode ser combinada com WINRT_NO_MODULE_LOCK.

Sua implementação personalizada do winrt::get_module_lock deve dar suporte às seguintes operações:

  • ++winrt::get_module_lock(): incremente a contagem de referência no bloqueio do módulo.
  • --winrt::get_module_lock(): decremente a contagem de referência no bloqueio do módulo.
  • if (winrt::get_module_lock()): verifique se a contagem de referência é diferente de zero. (Necessário se você estiver compilando uma DLL.)

WINRT_ASSERT, WINRT_VERIFY

Essas macros permitem que você personalize a manipulação de asserção. WINRT_ASSERT não exige que o argumento seja avaliado. WINRT_VERIFY exige que o argumento seja avaliado, mesmo em builds que não sejam de depuração.

Se você não personalizar essas macros e _DEBUG estiver definida, o C++/WinRT as tornará equivalente a _ASSERTE.

Se você não personalizar essas macros e _DEBUG não estiver definida, o C++/WinRT definirá WINRT_ASSERT para descartar a expressão não avaliada e definirá WINRT_VERIFY para descartar a expressão depois de avaliá-la.

WINRT_NO_MAKE_DETECTION

Se definida, desabilita o diagnóstico do C++/WinRT padrão que detecta que você construiu erroneamente uma classe de implementação sem usar winrt::make.

É altamente recomendável que você não defina esse símbolo, pois isso mascara uma fonte comum de erros de programação.

WINRT_DIAGNOSTICS

Se definida, habilita estatísticas internas para controlar 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

Se definida, inclui funções auxiliares para auxiliar nas visualizações de depuração nativas no Visual Studio. O código não é usado em runtime; ele existe apenas para depuração.

Se você não personalizar essa macro, as funções de suporte à visualização serão habilitadas se _DEBUG for definida. Para mais detalhes, confira Natvis (visualização de depuração nativa) do Visual Studio para C++/WinRT.

Você tem permissão para combinar arquivos com configurações diferentes na WINRT_NATVIS.

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

WINRT_EXPORT, WINRT_FAST_ABI_SIZE

Não use essas macros.