Integração CLR (C++/CX)
Alguns tipos do Windows Runtime recebem tratamento especial no C++/CX e nas linguagens que usam o CLR (Common Language Runtime). Este artigo aborda como vários tipos em uma linguagem são mapeados para outra linguagem. Por exemplo, o CLR mapeia Windows.Foundation.IVector para System.Collections.IList, Windows.Foundation.IMap para System.Collections.IDictionary e assim por diante. Da mesma forma, em particular, C++/CX mapeia tipos como Platform::Delegate e Platform::String.
Mapeando o Windows Runtime para C++/CX
Quando o C++/CX lê um arquivo de metadados (.winmd) do Windows, o compilador mapeia automaticamente namespaces Windows Runtime comuns e tipifica para namespaces e tipos C++/CX. Por exemplo, o tipo numérico UInt32
do Windows Runtime é mapeado automaticamente para default::uint32
.
O C++/CX mapeia vários outros tipos de Windows Runtime para o namespace Plataform. Por exemplo, o manipulador STRING Windows::Foundation, que representa uma cadeia de caracteres de texto Unicode somente leitura, é mapeada para a classe C++/CX Platform::String
. Quando uma operação de Windows Runtime retorna um ERRO HRESULT, ela é mapeada para um C++/CX Platform::Exception
.
O C++/CX também mapeia determinados tipos nos namespaces do Windows Runtime para aprimorar a funcionalidade do tipo. Para esses tipos, o C++/CX fornece construtores e métodos auxiliares que são específicos para o C++ e que não estão disponíveis no arquivo .winmd padrão do tipo.
A lista a seguir mostra as structs de valor que dão suporte a novos construtores e métodos auxiliares. Se você tiver gravado anteriormente um código que usa listas de inicialização de struct, altere-o para usar os construtores recém-adicionados.
Windows::Foundation
Ponto
Rect
Tamanho
Windows::UI
- Color
Windows::UI::Xaml
CornerRadius
Duration
GridLength
Espessura
Windows::UI::Xaml::Interop
- TypeName
Windows::UI::Xaml::Media
- Matriz
Windows::UI::Xaml::Media::Animation
KeyTime
RepeatBehavior
Windows::UI::Xaml::Media::Media3D
- Matrix3D
Mapeamento do CLR para C++/CX
Quando os compiladores do Microsoft C++ ou C# leem um arquivo .winmd, eles mapeiam automaticamente determinados tipos no arquivo de metadados para tipos C++/CX ou CLR apropriados. Por exemplo, no CLR, a interface IVector<T> é mapeada para IList<T>. Porém, em C++/CX, a interface IVector<T> não está mapeada para outro tipo.
IReference<T> no Windows Runtime mapeia para Nullable<T> no .NET.