C++/WinRT

C++/WinRT は Windows ランタイム (WinRT) API 用に完全に標準化された最新の C++17 言語プロジェクションで、ヘッダー ファイル ベースのライブラリとして実装され、最新の Windows API への最上位アクセス権を提供するように設計されています。 C++/WinRT の場合、標準に準拠した C++17 のコンパイラを使用して Windows ランタイム API を作成および使用できます。 Windows SDK には C++/WinRT が含まれます。バージョン 10.0.17134.0 (Windows 10、バージョン 1803) で導入されました。

C++/WinRT は、Windows 用の美しく高速なコードの作成に興味のある開発者向けです。 その理由は次のとおりです。

C++/WinRT の場合

 

C++ プログラミング言語は、企業とアプリケーションの独立系ソフトウェア ベンダー (ISV) の両方のセグメントで使用されています。これらでは、正確性、品質、パフォーマンスが高く評価されます。 たとえば、システム プログラミング、リソースが限られた埋め込みシステムやモバイル システム、ゲームやグラフィックス、デバイス ドライバー、工業用、科学技術用、医療用医療アプリケーションなどです。

言語の観点から見ると、C++ では、型が豊富で軽量な抽象化を常に作成および使用します。 ただし、RAW ポインター、RAW ループ、煩雑なメモリ割り当て、C++98 のリリース以降、言語は急激に変化しました。 最新の C++ (C++11 以降) は、アイデアの明確な表現、シンプルさ、読みやすさ、バグ発生の大幅な軽減が中心です。

C++ を使用して Windows API を作成および使用する場合は、C++/WinRT を使用します。 これは、C++/CX 言語プロジェクション、および Windows ランタイム C++ テンプレート ライブラリ (WRL) に代わる、Microsoft で推奨されているものです。

C++/WinRT を使用する場合は、標準的な C++ データ型、アルゴリズム、およびキーワードを使用します。 プロジェクションに独自のカスタム データ型はありませんが、多くの場合、標準型から適切に変換されるため、学習する必要はありません。 このため、使い慣れた標準的な C++ 言語機能と使用中のソース コードを使用し続けることができます。 C++/WinRT では、C++ アプリケーションで Windows ランタイム API を Win32 から Windows AppSDK、そして UWP に非常に簡単に呼び出すことができます。

Windows ランタイムの他の言語オプションに比べて、C++/WinRT はパフォーマンスが向上し、小さなバイナリを生成します。 ABI インターフェイスを直接使用した手書きのコードよりも優れています。 このため、抽象化では、Visual C++ コンパイラが最適化するように設計されている最新の C++ イディオムを使用します。 これには、C++/WinRT のパフォーマンス向上に特化した最新の Visual C++ の多くの新しい最適化機能だけでなく、マジック静的変数、空の基底クラス、strlen の省略も含まれます。

C++/WinRT をお客様のプロジェクトに段階的に導入する方法がいくつかあります。 Windows ランタイム コンポーネントを使用することも、C++/CX と相互運用することもできます。 詳細については、C++/WinRT と C++/CX 間の相互運用をご覧ください。

C++/WinRT への移植の詳細については、これらのリソースをご覧ください。

C++/WinRT サンプル アプリはどこにありますか?」も参照してください。

C++/WinRT に関するトピック

トピック 説明
C++/WinRT の概要 C++/WinRT の紹介: Windows ランタイム API 用の標準的な C++ 言語プロジェクション。
C++/WinRT の使用を開始する C++/WinRT の使用をすぐに開始できるように、このトピックでは、単純なコード例について説明します。
C++/WinRT の新機能 C++/WinRT に関するニュースと変更内容です。
よく寄せられる質問 C++/WinRT での Windows ランタイム API の作成と使用に関する質問への回答です。
トラブルシューティング このトピックに記載されている症状のトラブルシューティングおよび対処法に関する表は、新しいコードを作成しているか既存のアプリを移植しているかにはかかわらず役立つ可能性があります。
フォト エディター C++/WinRT サンプル アプリケーション フォト エディターは、C++/WinRT 言語プロジェクションでの開発を紹介する UWP のサンプル アプリケーションです。 このサンプル アプリケーションを使用すると、画像ライブラリから写真を取得し、関連する写真効果で選択したイメージを編集できます。
文字列の処理 With C++/WinRT では、標準的な C++ ワイド文字列型を使用して Windows ランタイム API を呼び出すか、または winrt::hstring 型を使用することができます。
標準的な C++ のデータ型と C++/WinRT C++/WinRT では、標準的な C++ データ型を使用して Windows ランタイム API を呼び出すことができます。
IInspectable への値のボックス化とボックス化解除 スカラーまたは配列値は、IInspectable を想定している関数に渡す前に、参照クラス オブジェクト内にラップする必要があります。 このラッピング プロセスは、値の "ボックス化" と呼ばれます。
C++/WinRT で API を使用する このトピックでは、C++/WinRT API を実装する Windows、サードパーティ コンポーネント ベンダー、またはユーザー自身に応じた使用方法について説明します。
C++/WinRT で API を作成する このトピックでは、直接的または間接的に winrt::implements 基本構造体を使用して、C++/WinRT API を作成する方法を示します。
C++/WinRT でのエラー処理 このトピックでは、C++/WinRT でのプログラミング時にエラーを処理するための方法について説明します。
デリゲートを使用したイベントの処理 このトピックでは、C++/WinRT を使用したイベント処理デリゲートの登録方法と取り消し方法について説明します。
イベントの作成 このトピックでは、イベントを発生させるランタイム クラスを含む、Windows ランタイム コンポーネントを作成する方法を示します。 コンポーネントを使用してイベントを処理するアプリも示します。
C++/WinRT でのコレクション C++/WinRT では、コレクションを実装したり、渡すときの時間と手間を大幅に減らすことができる、関数と基本クラスが提供されます。
同時開催操作と非同期操作 このトピックでは、C++/WinRT を使用した Windows ランタイムの非同期オブジェクトの作成方法と利用方法について説明します。
高度な同時実行操作と非同期操作 C++/WinRT での同時実行操作と非同期操作を使用した高度なシナリオを示します。
入力候補ソース サンプル 独自の入力候補ソース クラスを作成、使用する方法を説明します。
XAML コントロール: C++/WinRT プロパティへのバインド XAML コントロールに効果的にバインドできるプロパティは、"監視可能な" プロパティと呼ばれます。 このトピックでは、監視可能なプロパティを実装および使用する方法と、そのプロパティに XAML コントロールをバインドする方法を示します。
XAML アイテム コントロール: C++/WinRT コレクションへのバインド XAML アイテム コントロールに効果的にバインドできるコレクションは、"監視可能な" コレクションと呼ばれます。 このトピックでは、監視可能なコレクションを実装および使用する方法と、それに XAML アイテム コントロールをバインドする方法を示します。
C++/WinRT による XAML カスタム (テンプレート化) コントロール このトピックでは、C++/WinRT を使用して、シンプルなカスタム コントロールを作成する手順について説明します。 ここに示されている情報に基づき、豊富な機能のカスタム可能な独自の UI コントロールを作成することができます。
投影された API にパラメーターを渡す C++/WinRT では、一般的なケースの自動変換を提供することによって、投影された API へのパラメーターの受け渡しが簡略化されます。
C++/WinRT での COM コンポーネントの使用 このトピックでは、完全な Direct2D コードの例を使用し、C++/WinRT を使って COM クラスとインターフェイスを利用する方法を示します。
C++/WinRT での COM コンポーネントの作成 C++/WinRT は、Windows Runtime クラスを作成するのに役立つのと同様に、従来の COM コンポーネントを作成するのに役立ちます。
C++/CX から C++/WinRT への移行 このトピックでは、C++/CX プロジェクト内のソース コードを C++/WinRT の同等のコードに移植することに関する技術的な詳細を取り上げています。
C++/WinRT と C++/CX 間の相互運用 このトピックでは、C++/CXC++/WinRT オブジェクト間の変換に使用できる 2 つのヘルパー関数について説明します。
非同期性、および C++/WinRT と C++/CX 間の相互運用 これは、C++/CX から C++/WinRT への段階的な移植に関する高度なトピックです。 ここでは、並列パターン ライブラリ (PPL) のタスクとコルーチンを同じプロジェクトに並べて配置できる方法について説明します。
WRL から C++/WinRT への移行 このトピックでは、Windows ランタイム C++ テンプレート ライブラリ (WRL) のコードを C++/WinRT の同等のコードに移植する方法について説明します。
C# から C++/WinRT へのクリップボード サンプルの移植 (ケース スタディ) このトピックでは、ユニバーサル Windows プラットフォーム (UWP) アプリのサンプルのいずれかを C# から C++/WinRT へ移植するケース スタディについて説明します。 チュートリアルの手順を実行し、サンプルを自分で移植することにより、移植を練習し経験を得ることができます。
C# から C++/WinRT への移行 このトピックでは、C# プロジェクト内のソース コードを C++/WinRT の同等のコードに移植することに関する技術的な詳細を総合的に分類します。
C++/WinRT と ABI 間の相互運用 このトピックでは、アプリケーション バイナリ インターフェイス (ABI) と C++/WinRT オブジェクト間の変換方法について説明します。
C++/WinRT の強参照と弱参照 Windows ランタイムは参照カウント システムです。このようなシステムでは、強参照と弱参照の重要性とこれらの違いを認識することが重要です。
アジャイル オブジェクト アジャイル オブジェクトは、任意のスレッドからアクセスできるオブジェクトです。 お使いの C++/WinRT 型は既定ではアジャイルですが、オプトアウトできます。
直接割当ての診断 このトピックでは、ヘルパーの winrt::make ファミリを使用するのではなく、スタック上に実装型のオブジェクトを作成するという間違いを診断するのに役立つ C++/WinRT 2.0 機能について詳しく説明します。
実装の種類の拡張ポイント C++/WinRT 2.0 のこれらの拡張ポイントを使用すると、実装の種類の破棄を延期したり、破棄中に安全にクエリを実行したり、プロジェクションが実行された方法に対してエントリをフックしたりすることができます。
基本的な C++/WinRT Windows UI ライブラリ 2 の例 (UWP) このトピックでは、C++/WinRT UWP プロジェクトに Windows UI ライブラリ (WinUI) の基本サポートを追加する処理を順を追って説明します。 具体的には、このトピックでは、UWP アプリ用の WinUI 2 について説明します。
C++/WinRT を使用した Windows ランタイム コンポーネント このトピックでは、C++/WinRT を使用して Windows ランタイム コンポーネントを作成および使用する方法を示します。このコンポーネントは、任意の Windows ランタイム言語を使用してビルドされたユニバーサル Windows アプリから呼び出すことができます。
C++/WinRT アプリから使用するための C# Windows ランタイム コンポーネントの作成 このトピックでは、シンプルな C# コンポーネントを C++/WinRT プロジェクトに追加する処理を順を追って説明します。
C++/WinRT 用 Visual Studio ネイティブ デバッグ視覚化 (natvis) C++/WinRT Visual Studio 拡張機能 (VSIX) は、C++/WinRT の投影された型の Visual Studio ネイティブのデバッグの視覚化 (natvis) を提供します。 これにより、C# デバッグと同様のエクスペリエンスが実現します。
構成マクロ このトピックでは、C++/WinRT 構成マクロについて説明します。
C++/WinRT 名前付け規則 このトピックでは、C++/WinRT によって確立されている名前付け規則について説明します。

C++ 言語に関するトピック

トピック 説明
値のカテゴリと、その参照 このトピックでは、C++ に存在する値のさまざまなカテゴリについて説明します。 lvalues と rvalues については聞いたことがあると思いますが、それ以外の種類もあります。

重要な API