Windows Dev Center

Sistema de tipos (C++/CX)

Usando a arquitetura do Tempo de Execução do Windows, você pode usar C++/CX, Visual Basic, Visual C# e JavaScript para escrever aplicativos e componentes que acessem diretamente a API do Windows e interoperem com outros aplicativos e componentes do Tempo de Execução do Windows. Os aplicativos Windows Store 8.x escritos em C++ são compilados para código nativo que é executado diretamente na CPU. Os aplicativos do Windows Store 8.x escritos em C# ou Visual Basic são compilados para MSIL (Microsoft intermediate language) e executados em CLR (common language runtime). Os aplicativos do Windows Store 8.x escritos em JavaScript são executados em um ambiente de tempo de execução. Os componentes do sistema operacional Tempo de Execução do Windows são escritos em C++ e executados como código nativo. Todos esses componentes e aplicativos do Windows Store 8.x se comunicam diretamente por meio da ABI (interface binária de aplicativo) do Tempo de Execução do Windows.

Para habilitar o suporte para o Tempo de Execução do Windows em uma linguagem C++ moderna, a Microsoft criou o Extensões de componentes Visual C++ (C++/CX). O C++/CX fornece tipos básicos internos e implementações de tipos Tempo de Execução do Windows fundamentais que permitem que os aplicativos e componentes C++ se comuniquem na ABI com aplicativos escritos em outras linguagens. Você pode consumir qualquer tipo Tempo de Execução do Windows ou criar classes, estruturas, interfaces e outros tipos definidos pelo usuário que podem ser consumidos por outros aplicativos e componentes do Windows Store 8.x. Um aplicativo do Windows Store 8.x escrito em C++/CX também pode usar classes e estruturas C++ regulares, desde que elas não tenham acessibilidade pública.

Para uma discussão mais profunda da projeção de idioma C++/CX e como ela funciona sob as coberturas, veja estas postagens do blog:

  1. C++/CX Parte 0 de [n]: An Introduction

  2. C++/CX Parte 0 de [n]: An Introduction

  3. C++/CX Parte 2 de [n]: Types That Wear Hats

  4. C++/CX Parte 3 de [n]: Under Construction

  5. C++/CX Parte 4 de [n]: Static Member Functions

Quando você compila um aplicativo do Windows Store 8.x escrito em C++, o compilador gera o executável no código de máquina nativo e também gera um arquivo de metadados do Windows (.winmd) separado que contém descrições de tipos Tempo de Execução do Windows públicos, que incluem classes, estruturas, enumerações, interfaces, interfaces parametrizadas e delegados. O formato de metadados lembra o formato usado nos assemblies do .NET Framework. Em um componente do C++, o arquivo .winmd contém apenas metadados; o código executável reside em um arquivo separado. Esse é o caso dos componentes do Tempo de Execução do Windows incluídos no Windows. O nome do arquivo WinMD deve coincidir ou ser um prefixo do namespace raiz no código-fonte. (Para as linguagens .NET Framework, o arquivo .winmd contém o código e os metadados, assim como um assembly do .NET Framework.)

Os metadados no arquivo .winmd representam a superfície publicada do seu código. Os tipos publicados são visíveis para outros Windows Store 8.x independentemente da linguagem em que os outros aplicativos forem escritos. Portanto, os metadados ou seu código publicado podem conter apenas tipos especificados pelo sistema de tipo Tempo de Execução do Windows. As construções de linguagem específicas ao C++, como classes, matrizes, modelos ou contêineres STL regulares não podem ser publicadas nos metadados porque um aplicativo cliente Javascript ou C# não saberia o que fazer com elas.

Se um tipo ou um método estará visível nos metadados dependerá de quais modificadores de acessibilidade foram aplicados a ele. Para ser visível, um tipo deve ser declarado em um namespace e deve ser declarado como público. Uma classe ref não pública é permitida como um tipo auxiliar interno no seu código; ela não está visível nos metadados. Até mesmo em uma classe ref pública, nem todos os membros estão necessariamente visíveis. A tabela a seguir lista a relação entre especificadores de acesso C++ em uma classe ref pública e a visibilidade de metadados do Tempo de Execução do Windows:

Publicado nos metadados

Não publicado nos metadados

public

private

protected

internal

público protegido

privado protegido

Use o Pesquisador de objetos para exibir o conteúdo de arquivos .winmd. Os componentes do Tempo de Execução do Windows fornecidos com o Windows estão no arquivo Windows.winmd. O arquivo default.winmd contém os tipos fundamentais usados no C++/CX e platform.winmd contém tipos adicionais do namespace Platform. Por padrão, esses três arquivos .winmd são incluídos em todos os projetos C++ para aplicativos Windows Store 8.x.

Dica Dica

Os tipos no Namespace Platform::Collections não aparecem no arquivo .winmd porque não são públicos. Eles são implementações particulares específicas do C++ das interfaces definidas em Windows::Foundation::Collections. Um aplicativo do Tempo de Execução do Windows escrito em JavaScript ou C# não sabe o que é uma Classe Platform::Collections::Vector, mas pode consumir um Windows::Foundation::Collections::IVector. Os tipos Platform::Collections são definidos em collection.h.

As seções a seguir descrevem os recursos principais do sistema de tipo Tempo de Execução do Windows e como há suporte para eles no C++/CX.

Hh755822.collapse_all(pt-br,VS.140).gifNamespaces

Todos os tipos Tempo de Execução do Windows devem ser declarados em um namespace; a própria API do Windows é organizada por namespaces. Um arquivo .winmd deve ter o mesmo nome do namespace raiz. Por exemplo, uma classe denominada A.B.C.MyClass poderá ser instanciada somente se for definida em um arquivo de metadados denominado A.winmd ou A.B.winmd ou A.B.C.winmd. O nome da DLL não precisa coincidir com o nome do arquivo .winmd.

A própria API do Windows foi reinventada como uma biblioteca de classes bem fatorada organizada por namespaces. Todos os componentes do Tempo de Execução do Windows são declarados nos namespaces Windows.*.

Para obter mais informações, consulte Namespaces e visibilidade do tipo (C++/CX).

Hh755822.collapse_all(pt-br,VS.140).gifTipos fundamentais

O Tempo de Execução do Windows define os seguintes tipos fundamentais: UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double, Char16, Boolean e String. O C++/CX oferece suporte aos tipos numéricos fundamentais em seu namespace padrão como uint16, uint32, uint64, int16, int32, int64, float32, float64 e char16. Boolean e String também são definidos no namespace Platform.

O C++/CX também define uint8, equivalente a unsigned char, que não tem suporte no Tempo de Execução do Windows e não pode ser usado em APIs públicas.

Um tipo fundamental pode ser transformado em anulável convertendo-o em uma interface Platform::IBox Interface. Para obter mais informações, consulte Classes e estruturas de valor (C++/CX).

Para obter mais informações sobre tipos fundamentais, consulte Tipos fundamentais (C++/CX).

Hh755822.collapse_all(pt-br,VS.140).gifCadeias de caracteres

Uma cadeia de caracteres do Tempo de Execução do Windows é uma sequência imutável de caracteres UNICODE de 16 bits. Uma cadeia de caracteres do Tempo de Execução do Windows é projetada como Platform::String^. Essa classe fornece métodos para construção, manipulação e conversão de cadeia de caracteres de e em wchar_t.

Para obter mais informações, consulte Cadeias de caracteres (C++/CX).

Hh755822.collapse_all(pt-br,VS.140).gifMatrizes

O Tempo de Execução do Windows oferece suporte a matrizes unidimensionais de qualquer tipo. Não há suporte para matrizes de matrizes. No C++/CX, as matrizes Tempo de Execução do Windows são projetadas como Classe Platform::Array.

Para obter mais informações, consulte Matriz e WriteOnlyArray (C++/CX).

Hh755822.collapse_all(pt-br,VS.140).gifClasses e estruturas ref

Uma classe Tempo de Execução do Windows é projetada no C++/CX como uma classe ou estrutura ref, pois é copiada por referência. O gerenciamento de memória para classes e estruturas ref é manipulado de forma transparente por meio da contagem de referência. Quando a última referência a um objeto fica fora do escopo, o objeto é destruído. Uma classe ou estrutura ref pode:

  • Conter como membros construtores, métodos, propriedades e eventos. Esses membros podem ter acessibilidade pública, privada, protegida ou interna.

  • Pode conter definições aninhadas privadas de enum, estrutura ou classe.

  • Pode herdar diretamente de uma classe base e pode implementar qualquer número de interfaces. Todas as classes ref podem ser convertidas implicitamente na Classe Platform::Object e podem substituir seus métodos virtuais, por exemplo, Object::ToString.

Uma classe ref que tem um construtor público também precisa ser declarada como fechada para evitar mais derivação.

Para obter mais informações, consulte Classes e estruturas ref (C++/CX).

Hh755822.collapse_all(pt-br,VS.140).gifClasses e estruturas de valor

Uma classe ou estrutura de valor representa uma estrutura de dados básica e contém apenas campos, que podem ser classes de valor, estruturas de valor ou o tipo Platform::String^. As estruturas e classes de valor são copiadas por valor.

Um estrutura de valor pode ser transformada em anulável convertendo em uma interface IBox.

Para obter mais informações, consulte Classes e estruturas de valor (C++/CX).

Hh755822.collapse_all(pt-br,VS.140).gifClasses parciais

O recurso de classe parcial permite que uma classe seja definida em vários arquivos. Ele é usado principalmente para habilitar a geração de ferramentas, como o editor XAML, para modificar um arquivo sem tocar no arquivo que você edita.

Para obter mais informações, consulte Classes parciais (C++/CX).

Hh755822.collapse_all(pt-br,VS.140).gifPropriedades

Uma propriedade é um membro de dados públicos de qualquer tipo Tempo de Execução do Windows e é implementado como um par de métodos get/set. O código de cliente acessa uma propriedade como se fosse um campo público. Uma propriedade que não requer código get ou set personalizado é conhecida como uma propriedade trivial e pode ser declarada sem métodos get ou set explícitos.

Para obter mais informações, consulte Propriedades (C++/CX).

Hh755822.collapse_all(pt-br,VS.140).gifTempo de Execução do Windows coleções em C++/CX

O Tempo de Execução do Windows define um conjunto de interfaces para tipos de coleção que cada linguagem implementa da sua própria maneira. O C++/CX fornece implementações na Classe Platform::Collections::Vector, Classe Platform::Collections::Map e outros tipos de coleção concreta relacionadas, que são compatíveis com suas contrapartes STL (Biblioteca de Modelos Padrão).

Para obter mais informações, consulte Coleções (C++/CX).

Hh755822.collapse_all(pt-br,VS.140).gifClasses de referência de modelo

As classes ref particulares e internas podem ser modeladas e especializadas.

Para obter mais informações, consulte Classes de referência de modelo (C++/CX).

Hh755822.collapse_all(pt-br,VS.140).gifInterfaces

Uma interface do Tempo de Execução do Windows define um conjunto de propriedades públicas, métodos e eventos que uma classe ou estrutura ref deverá implementar se herdar da interface.

Para obter mais informações, consulte Interfaces (C++/CX).

Hh755822.collapse_all(pt-br,VS.140).gifEnums

Uma classe enum no Tempo de Execução do Windows é semelhante a uma enum com escopo em C++. O tipo subjacente é int32, a menos que o atributo [Flags] seja aplicado; nesse caso, o tipo subjacente será uint32.

Para obter mais informações, consulte Enums (C++/CX).

Hh755822.collapse_all(pt-br,VS.140).gifDelegados

Um delegado no Tempo de Execução do Windows é análogo a um objeto std::function no C++. É um tipo especial de classe ref usado para invocar funções fornecidas pelo cliente que têm assinaturas compatíveis. Os delegados são usados mais comumente no Tempo de Execução do Windows como o tipo de um evento.

Para obter mais informações, consulte Delegados (C++/CX).

Hh755822.collapse_all(pt-br,VS.140).gifExceções

Em C++/CX, você pode capturar tipos de exceção personalizados, tipos std::exception e tipos Platform::Exception.

Para obter mais informações, consulte Exceções (C++/CX).

Hh755822.collapse_all(pt-br,VS.140).gifEventos

Um evento é um membro público em uma classe ou estrutura ref cujo tipo é delegado. Um evento somente pode ser invocado, ou seja, disparado, pela classe que o possui. No entanto, o código de cliente pode fornecer suas próprias funções, que são conhecidas como manipuladores de eventos e são invocadas quando a classe possuidora dispara o evento.

Para obter mais informações, consulte Eventos (C++/CX).

Hh755822.collapse_all(pt-br,VS.140).gifConversão

O C++/CX oferece suporte aos operadores cast C++ padrão static_cast, dynamic_cast e reinterpret_cast, além do operador safe_cast que é específico ao C++/CX.

Para obter mais informações, consulte Conversão (C++/CX).

Hh755822.collapse_all(pt-br,VS.140).gifBoxing

Uma variável demarcada é um tipo de valor que é encapsulado em um tipo de referência em situações nas quais a semântica de referência é necessária.

Para obter mais informações, consulte Conversão boxing (C++/CX).

Hh755822.collapse_all(pt-br,VS.140).gifAtributos

Um atributo é um valor de metadados que pode ser aplicado a qualquer tipo Tempo de Execução do Windows ou membro de tipo e pode ser inspecionado em tempo de execução. O Tempo de Execução do Windows define um conjunto de atributos comuns no namespace Windows::Foundation::Metadata. Os atributos definidos pelo usuário nas interfaces públicas não têm suporte do Tempo de Execução do Windows nessa versão.

Descreve como marcar APIs públicas como preteridas usando o mesmo atributo usado pelos tipos de sistemas do Tempo de Execução do Windows.

Para obter mais informações, consulte Reprovando tipos e membros (C++/CX).

Mostrar:
© 2015 Microsoft