CLR 統合 (C++/CX)
一部の Windows ランタイム型は、C++/CX および共通言語ランタイム (CLR) に基づく言語で、特別な処理を受け取ります。 この記事では、1 つの言語のいくつかの型から別の言語へのマップの仕組みについて説明します。 たとえば、CLR は Windows.Foundation.IVector を System.Collections.IList へ、Windows.Foundation.IMap を System.Collections.IDictionary へ、というようにマップします。 同様に、C++/CX は Platform::Delegate や Platform::String などの型を特別にマップします。
Windows ランタイムを C++/CX へマッピング
C++/CX が Windows メタデータ (.winmd) ファイルを読み取る場合、コンパイラは自動的に、共通の Windows ランタイムの名前空間と型を C++/CX の名前空間と型にマップします。 たとえば、数値の Windows ランタイム型 UInt32
は自動的 default::uint32
にマップされます。
C++/CX は、他のいくつかの Windows ランタイム型をプラットフォーム名前空間にマップします。 たとえば、Windows::Foundation HSTRING ハンドルは、読み取り専用の Unicode テキスト文字列を表しますが、C++/CX Platform::String
クラスにマップされます。 Windows ランタイム操作によってエラー HRESULT が戻される場合、C++/CX Platform::Exception
にマップされます。
C++/CX は型の機能強化のためにも、Windows ランタイム名前空間の特定の型をマップします。 これらの型については、C++/CX は、C++ に固有で型の標準 .winmd ファイルでは使用できない、ヘルパー コンストラクターおよびメソッドを提供しています。
新しいコンストラクターとヘルパー メソッドをサポートしている値構造体を次の一覧に示します。 構造体の初期化リストを使用するコードを既に作成済みの場合、新たに追加されたコンストラクターを使用するように変更してください。
Windows::Foundation
Point
矩形
サイズ
Windows::UI
- 色
Windows::UI::Xaml
CornerRadius
Duration
GridLength
太さ
Windows::UI::Xaml::Interop
- TypeName
Windows::UI::Xaml::Media
- マトリックス
Windows::UI::Xaml::Media::Animation
KeyTime
RepeatBehavior
Windows::UI::Xaml::Media::Media3D
- Matrix3D
CLR を C++/CX にマッピング
Microsoft C++ または C# コンパイラは、.winmd ファイルを読み取る際に、メタデータ ファイル内の特定の型を、適切な C++/CX または CLR 型に自動的にマップします。 たとえば、CLR では、IVector<T> インターフェイスが IList<T> にマップされます。 しかし、C++/CX では、IVector<T> インターフェイスは別の型にマップされません。
Windows ランタイムの IReference<T> は、.NET の Nullable<T> にマップされます。