C++/WinRT

C++/WinRT é uma projeção de linguagem C++17 completamente moderna e padrão para APIs do Windows Runtime (WinRT), implementada como uma biblioteca com base em cabeçalho e arquivo, projetada para fornecer acesso de primeira classe à API moderna do Windows. Com o C++/WinRT, você pode criar e consumir APIs do Windows Runtime usando qualquer compilador C++17 em conformidade com os padrões. O SDK do Windows inclui o C++/WinRT; ele foi introduzido na versão 10.0.17134.0 (Windows 10, versão 1803).

C++/WinRT é para qualquer desenvolvedor interessado em escrever códigos lindos e rápidos para Windows. Veja por quê.

O caso de C++/WinRT

 

A linguagem de programação C++ é usada na empresa e em segmentos de ISVs (fornecedores independentes de software) para aplicativos em que altos níveis de correção, qualidade e desempenho são avaliados. Por exemplo: sistemas de programação; sistemas incorporados e móveis com recursos limitados; jogos e elementos gráficos; drivers de dispositivo; e os aplicativos industriais, científicos e médicos, para citar apenas alguns.

Do ponto de vista do idioma, C++ sempre foi sobre criação e consumo de abstrações dos tipos rico e leve. Mas o idioma mudou radicalmente desde os ponteiros brutos, loops brutos e alocação de memória criteriosa e liberação de C++98. C++ moderno (do C++11 em diante) é sobre expressão clara de ideias, simplicidade, leitura fácil e uma menor probabilidade de introdução de bugs.

Para criar e consumir APIs do Windows usando C++, existe o C++/WinRT. Isso é a substituição recomendada da Microsoft para o C++/CX projeção de linguagem e a WRL (Biblioteca de Modelos C++ do Tempo de Execução do Windows).

Você usa tipos de dados C++ padrão, algoritmos e palavras-chave ao usar C++/WinRT. A projeção tem seus próprios tipos de dados personalizados, mas, na maioria dos casos, você não precisa aprendê-los, porque eles fornecem as conversões apropriadas para e de tipos padrão. Dessa forma, você pode continuar a usar os recursos de linguagem C++ padrão que você está acostumado a usar e o código-fonte que você já tem. O C++/WinRT faz com que seja extremamente fácil chamar APIs do Windows em qualquer aplicativo C++, desde aplicativos da Win32, do Windows AppSDK e UWP.

C++/WinRT tem melhor desempenho e produz binários menores do que qualquer outra opção de idioma para o Windows Runtime. Ele até supera o desempenho do código escrito usando as interfaces ABI diretamente. Isso ocorre porque as abstrações usam idiomas C++ modernos para qual o compilador do Visual C++ é projetado para otimizar. Isso inclui estatísticas mágicas, classes de base vazia, elisão de strlen, assim como muitas outras otimizações mais novas na versão mais recente do Visual C++ com o objetivo específico de melhorar o desempenho de C++/WinRT.

Há maneiras de introduzir gradualmente o C++/WinRT em seus projetos. Você pode usar componentes do Windows Runtime ou pode interoperar com o C++/CX. Para saber mais, confira Interoperabilidade entre o C++/WinRT e o C++/CX.

Para saber mais sobre a portabilidade para o C++ /WinRT, confira esses recursos.

Confira também Onde posso encontrar aplicativos de exemplo do C++/WinRT?.

Tópicos sobre C++/WinRT

Tópico Descrição
Introdução ao C++/WinRT Uma introdução ao C++/WinRT, uma projeção de linguagem C++ padrão para APIs do Windows Runtime.
Introdução ao C++/WinRT Este tópico fornece instruções para você se atualizar sobre o uso do C++/WinRT por um exemplo de código simples.
O que há de novo no C++/WinRT Notícias e as alterações a C++/WinRT.
Perguntas frequentes Respostas às perguntas que você pode ter sobre a criação e consumo de APIs do Windows Runtime com C++/WinRT.
Solução de problemas A tabela de sintomas de solução de problemas e soluções neste tópico pode ser útil para você se você estiver recortando novo código ou fazendo a portabilidade de um aplicativo existente.
Exemplo de aplicativo Editor de fotos em C++/WinRT O Editor de Fotos é um aplicativo de exemplo UWP que mostra o desenvolvimento com a projeção de linguagem C++/WinRT. O aplicativo de exemplo permite que você recupere fotos da biblioteca de Imagens e, em seguida, edite a imagem selecionada com efeitos fotográficos diferentes.
Manipulação de cadeia de caracteres Com C++/WinRT, você pode chamar APIs do Windows Runtime usando tipos de cadeia ampla de C++ padrão ou você pode usar o tipo winrt::hstring.
Tipos de dados C++ padrão e C++/WinRT Com o C++/WinRT, você pode chamar APIs do Windows Runtime usando tipos de dados C++ padrão.
Fazer conversão boxing e unboxing de valores para IInspectable Um valor escalar ou de matriz precisa ser encapsulado em um objeto de classe de referência antes de ser passado para uma função que espera IInspectable. Esse processo de encapsulamento é conhecido como conversão do valor.
Consumir APIs com C++/WinRT Este tópico mostra como consumir as APIs do C++/WinRT, sejam elas implementadas pelo Windows, um fornecedor de componentes de terceiros ou por você mesmo.
Criar APIs com C++/WinRT Este tópico mostra como criar APIs de C++/WinRT usando a estrutura de base winrt::implements, direta ou indiretamente.
Tratamento de erro com C++/WinRT Este tópico aborda as estratégias para processar erros ao programar com C++/WinRT.
Manejar eventos usando delegados Este tópico mostra como registrar e revogar delegados lidando com eventos usando C++/WinRT.
Criar eventos Este tópico demonstra como criar um componente do Windows Runtime que contém uma classe de tempo de execução que gera eventos. Ele também demonstra um aplicativo que consome o componente e maneja os eventos.
Coleções com C++/WinRT C++/WinRT fornece funções e classes base que economizam muito tempo e esforço quando você deseja implementar e/ou passar coleções.
Simultaneidade e operações assíncronas Este tópico mostra as maneiras nas quais você pode criar e consumir objetos assíncronos do Windows Runtime com C++/WinRT.
Simultaneidade e assincronia avançadas Cenários avançados com simultaneidade e assincronia no C++/WinRT.
Um exemplo de origem de conclusão Mostra como criar e consumir sua classe de origem de conclusão.
Controles XAML; associar a uma propriedade C++/WinRT Uma propriedade que pode ser efetivamente vinculada a um controle de itens XAML é conhecida como uma propriedade observável. Este tópico mostra como implementar e consumir uma propriedade observável e como associar um controle XAML a ela.
Controles de itens XAML; associar a uma coleção C++/WinRT Uma coleção que pode ser efetivamente vinculada a um controle de itens XAML é conhecida como uma coleção observável. Este tópico mostra como implementar e consumir uma coleção observável e como associar um controle de itens XAML a ela.
Controles personalizados (modelos) XAML com C++/WinRT Este tópico orienta você pelas etapas de criação de um controle personalizado simples usando C++/WinRT. Você pode usar as informações aqui como base para criar seus próprios controles de interface do usuário personalizáveis e ricos em recursos.
Passando parâmetros para APIs projetadas O C++/WinRT simplifica a passagem de parâmetros para APIs projetadas, fornecendo conversões automáticas para casos comuns.
Consumir componentes COM com C++/WinRT Este tópico usa um exemplo de código completo do Direct2D para mostrar como usar C++/WinRT para consumir classes e interfaces COM.
Criar componentes COM com C++/WinRT C++/WinRT pode ajudá-lo a criar componentes COM clássicos, exatamente como ajuda a criar classes no Windows Runtime.
Mover do C++/CX para C++/WinRT Este tópico descreve os detalhes técnicos envolvidos na portabilidade do código-fonte em um projeto C++/CX para seu equivalente em C++/WinRT.
Interoperabilidade entre C++/WinRT e C++/CX Este tópico mostra duas funções auxiliares que podem ser usadas para realizar a conversão entre objetos de C++/CX e de C++/WinRT.
Assincronia e interoperabilidade entre o C++/WinRT e o C++/CX Trata-se de um tópico avançado sobre a portabilidade gradativa do C++/CX para o C++/WinRT. Ele mostra como as tarefas e as corrotinas da PPL (Biblioteca de Padrões Paralelos) podem existir lado a lado no mesmo projeto.
Mudar do WRL para o C++/WinRT Este tópico mostra como fazer a portabilidade o código da WRL (Biblioteca de Modelos C++ do Tempo de Execução do Windows) para seu equivalente no C++/WinRT.
Realizar a portabilidade do exemplo da Área de Transferência de C++/WinRT para C#, um estudo de caso Este tópico apresenta um estudo de caso de portabilidade de um exemplo de aplicativo UWP (Plataforma Universal do Windows) de C# para C++/WinRT. Você pode adquirir prática e experiência em portabilidade seguindo o passo a passo e fazendo a portabilidade da amostra para si mesmo à medida que avança.
Mover do C# para C++/WinRT Este tópico descreve os detalhes técnicos envolvidos na portabilidade do código-fonte em um projeto C# para o equivalente no C++/WinRT.
Interoperabilidade entre C++/WinRT e ABI Este tópico mostra como realizar a conversão entre interface binária do aplicativo (ABI) e objetos do C++/WinRT.
Referências fortes e fracas em C++/WinRT O Windows Runtime é um sistema de contagem de referência; e, em um sistema desse tipo, é importante que você conheça o significado e a distinção entre referências fortes e fracas.
Objetos ágeis Um objeto ágil é aquele que pode ser acessado de qualquer thread. Seus tipos C++/WinRT são ágeis por padrão, mas você pode recusá-los.
Diagnosticando alocações diretas Este tópico apresenta detalhes sobre um recurso do C++s/WinRT 2.0 que ajuda você a diagnosticar o erro de criação de um objeto do tipo de implementação na pilha, em vez de usar a família winrt::make de auxiliares, como deveria ser.
Pontos de extensão para seus tipos de implementação Esses pontos de extensão no C++/WinRT 2.0 permitem adiar a destruição dos tipos de implementação, para consultar com segurança durante a destruição e para conectar a entrada e a saída dos métodos projetados.
Um exemplo da Biblioteca de Interface do Usuário do Windows 2 para C++/WinRT básica (UWP) Este tópico descreve o processo de adição de suporte básico à WinUI (Biblioteca de Interface do Usuário do Windows) ao seu projeto UWP para C++/WinRT. Este tópico trata especificamente da WinUI 2, que é usada em aplicativos UWP.
Componentes do Windows Runtime com C++/WinRT Este tópico mostra como usar o C++/WinRT para criar e consumir um componente do Windows Runtime, o qual pode ser chamado por um aplicativo universal do Windows criado usando qualquer linguagem do Windows Runtime.
Criação de um componente do Windows Runtime em C# para uso em um aplicativo C++/WinRT Este tópico orienta você no processo de adicionar um componente simples em C# a um projeto C++/WinRT.
Natvis (visualização de depuração nativa) do Visual Studio para C++/WinRT O VSIX (Extensão do Visual Studio) para C++/WinRT fornece o Natvis (visualização de depuração nativa) do Visual Studio de tipos projetados do C++/WinRT. Isso fornece uma experiência semelhante à depuração do C#.
Macros de configuração Este tópico descreve as macros de configuração do C++/WinRT.
Convenções de nomenclatura do C++/WinRT Esse tópico explica as convenções de nomenclatura estabelecidas pelo C++/WinRT.

Tópicos sobre a linguagem C++

Tópico Descrição
Categorias de valores e referências a eles Este tópico descreve as diversas categorias de valores que existem em C++. Você já deve ter ouvido falar de lvalues e rvalues, mas há outros tipos também.

APIs importantes