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