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 .dll
s 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.