C++/WinRT は Windows ランタイム (WinRT) API 用に完全に標準化された最新の C++17 言語プロジェクションで、ヘッダー ファイル ベースのライブラリとして実装され、最新の Windows API への最上位アクセス権を提供するように設計されています。C++/WinRT is an entirely standard modern C++17 language projection for Windows Runtime (WinRT) APIs, implemented as a header-file-based library, and designed to provide you with first-class access to the modern Windows API. C++/WinRT の場合、標準に準拠した C++17 のコンパイラを使用して Windows ランタイム API を作成および使用できます。With C++/WinRT, you can author and consume Windows Runtime APIs using any standards-compliant C++17 compiler. Windows SDK には C++/WinRT が含まれます。バージョン 10.0.17134.0 (Windows 10、バージョン 1803) で導入されました。The Windows SDK includes C++/WinRT; it was introduced in version 10.0.17134.0 (Windows 10, version 1803).

C++/WinRT は、Windows 用の美しく高速なコードの作成に興味のある開発者向けです。C++/WinRT is for any developer interested in writing beautiful and fast code for Windows. 次に、その理由を示します。Here's why.

C++/WinRT の場合The case for C++/WinRT


C++ プログラミング言語は、企業アプリケーションの独立系ソフトウェア ベンダー (ISV) セグメントの両方で使用されています。これらでは、正確性、品質、パフォーマンスが高く評価されています。The C++ programming language is used both in the enterprise and independent software vendor (ISV) segments for applications where high levels of correctness, quality, and performance are valued. たとえば、システム プログラミング、リソースが限られた埋め込みシステムやモバイル システム、ゲームやグラフィックス、デバイス ドライバー、工業用、科学技術用、医療用医療アプリケーションなどです。For example: systems programming; resource-constrained embedded and mobile systems; games and graphics; device drivers; and industrial, scientific, and medical applications, to name but some.

言語の観点から見ると、C++ では、型が豊富で軽量な抽象化を常に作成および使用します。From a language point of view, C++ has always been about authoring and consuming abstractions that are both type-rich and lightweight. ただし、RAW ポインター、RAW ループ、煩雑なメモリ割り当て、C++98 のリリース以降、言語は急激に変化しました。But the language has changed radically since the raw pointers, raw loops, and painstaking memory allocation and releasing of C++98. 最新の C++ (C++11 以降) は、アイデアの明確な表現、シンプルさ、読みやすさ、バグ発生の大幅な軽減が中心です。Modern C++ (from C++11 onward) is about clear expression of ideas, simplicity, readability, and a much lower likelihood of introducing bugs.

C++ を使用して Windows ランタイム API を作成および使用する場合は、C++/WinRT を使用します。For authoring and consuming Windows Runtime APIs using C++, there is C++/WinRT. これは、C++/CX 言語プロジェクション、および Windows ランタイム C++ テンプレート ライブラリ (WRL) に代わる、Microsoft で推奨されているものです。This is Microsoft's recommended replacement for the C++/CX language projection, and the Windows Runtime C++ Template Library (WRL).

C++/WinRT を使用する場合は、標準的な C++ データ型、アルゴリズム、およびキーワードを使用します。You use standard C++ data types, algorithms, and keywords when you use C++/WinRT. プロジェクションに独自のカスタム データ型はありませんが、多くの場合、標準型から適切に変換されるため、学習する必要はありません。The projection does have its own custom data types, but in most cases you don't need to learn them because they provide appropriate conversions to and from standard types. このため、使い慣れた標準的な C++ 言語機能と使用中のソース コードを使用し続けることができます。That way, you can continue to use the standard C++ language features that you're accustomed to using, and the source code that you already have. C++/WinRT では、C++ アプリケーションで Windows ランタイム API を Win32 から UWP に非常に簡単に呼び出すことができます。C++/WinRT makes it extremely easy to call Windows Runtime APIs in any C++ application, from Win32 to UWP.

Windows ランタイムの他の言語オプションに比べて、C++/WinRT はパフォーマンスが向上し、小さなバイナリを生成します。C++/WinRT performs better and produces smaller binaries than any other language option for the Windows Runtime. ABI インターフェイスを直接使用した手書きのコードよりも優れています。It even outperforms handwritten code using the ABI interfaces directly. このため、抽象化では、Visual C++ コンパイラが最適化するように設計されている最新の C++ イディオムを使用します。That's because the abstractions use modern C++ idioms that the Visual C++ compiler is designed to optimize. これには、C++/WinRT のパフォーマンス向上に特化した最新の Visual C++ の多くの新しい最適化機能だけでなく、マジック static、空の基底クラス、strlen の省略も含まれます。This includes magic statics, empty base classes, strlen elision, as well as many newer optimizations in the latest version of Visual C++ targeted specifically at improving the performance of C++/WinRT.

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

トピックTopic 説明Description
C++/WinRT の概要Introduction to C++/WinRT C++/WinRT の紹介 — Windows ランタイム API 用の標準的な C++ 言語プロジェクション。An introduction to C++/WinRT—a standard C++ language projection for Windows Runtime APIs.
C++/WinRT の使用を開始するGet started with C++/WinRT C++/WinRT の使用をすぐに開始できるように、このトピックでは、単純なコード例について説明します。To get you up to speed with using C++/WinRT, this topic walks through a simple code example.
C++/WinRT の新機能What's new in C++/WinRT C++/WinRT に関するニュースと変更内容です。News and changes to C++/WinRT.
よく寄せられる質問Frequently-asked questions C++/WinRT での Windows ランタイム API の作成と使用に関する質問への回答です。Answers to questions that you're likely to have about authoring and consuming Windows Runtime APIs with C++/WinRT.
トラブルシューティングTroubleshooting このトピックにある現象のトラブルシューティングおよび対処法に関する表は、新しいコードを作成しているか既存のアプリを移植しているかにはかかわらず役立つ可能性があります。The table of troubleshooting symptoms and remedies in this topic may be helpful to you whether you're cutting new code or porting an existing app.
フォト エディター C++/WinRT サンプル アプリケーションPhoto Editor C++/WinRT sample application フォト エディターは、C++/WinRT 言語プロジェクションでの開発を紹介する UWP のサンプル アプリケーションです。Photo Editor is a UWP sample application that showcases development with the C++/WinRT language projection. サンプル アプリケーションを使用すると、画像ライブラリから写真を取得し、関連する写真効果で選択したイメージを編集できます。The sample application allows you to retrieve photos from the Pictures library, and then edit the selected image with assorted photo effects.
文字列の処理String handling C++/WinRT では、標準的な C++ ワイド文字列型を使用して Windows ランタイム API を呼び出すか、winrt::hstring 型を使用することができます。With C++/WinRT, you can call Windows Runtime APIs using standard C++ wide string types, or you can use the winrt::hstring type.
標準的な C++ のデータ型と C++/WinRTStandard C++ data types and C++/WinRT C++/WinRT では、標準的な C++ データ型を使用して Windows ランタイム API を呼び出すことができます。With C++/WinRT, you can call Windows Runtime APIs using Standard C++ data types.
IInspectable へのスカラー値のボックス化とボックス化解除Boxing and unboxing scalar values to IInspectable スカラー値は、IInspectable を想定している関数に渡す前に、参照クラス オブジェクト内にラップする必要があります。A scalar value needs to be wrapped inside a reference class object before being passed to a function that expects IInspectable. このラッピング プロセスは、値のボックス化と呼ばれます。That wrapping process is known as boxing the value.
C++/WinRT で API を使用するConsume APIs with C++/WinRT このトピックでは、C++/WinRT API を実装する Windows、サードパーティ コンポーネント ベンダー、またはユーザー自身に応じた使用方法について説明します。This topic shows how to consume C++/WinRT APIs, whether they're implemented by Windows, a third-party component vendor, or by yourself.
C++/WinRT で API を作成するAuthor APIs with C++/WinRT このトピックでは、直接的または間接的に winrt::implements 基本構造体を使用して、C++/WinRT API を作成する方法を示します。This topic shows how to author C++/WinRT APIs by using the winrt::implements base struct, either directly or indirectly.
C++/WinRT でのエラー処理Error handling with C++/WinRT このトピックでは、C++/WinRT でのプログラミング時にエラーを処理するための方法について説明します。This topic discusses strategies for handling errors when programming with C++/WinRT.
デリゲートを使用したイベントの処理Handle events by using delegates このトピックでは、C++/WinRT を使用したイベント処理デリゲートの登録方法と取り消し方法について説明します。This topic shows how to register and revoke event-handling delegates using C++/WinRT.
イベントの作成Author events このトピックでは、イベントを発生させるランタイム クラスを含む、Windows ランタイム コンポーネントを作成する方法を示します。This topic demonstrates how to author a Windows Runtime component containing a runtime class that raises events. コンポーネントを使用してイベントを処理するアプリも示します。It also demonstrates an app that consumes the component and handles the events.
C++/WinRT でのコレクションCollections with C++/WinRT C++/WinRT では、コレクションを実装したり、渡すときの時間と手間を大幅に減らすことができる、関数と基本クラスが提供されます。C++/WinRT provides functions and base classes that save you a lot of time and effort when you want to implement and/or pass collections.
同時開催操作と非同期操作Concurrency and asynchronous operations このトピックでは、C++/WinRT を使用した Windows ランタイムの非同期オブジェクトの作成方法と利用方法について説明します。This topic shows the ways in which you can both create and consume Windows Runtime asynchronous objects with C++/WinRT.
より高度な同時実行操作と非同期操作More advanced concurrency and asynchrony C++/WinRT での同時実行操作と非同期操作を使用したより高度なシナリオを示します。More advanced scenarios with concurrency and asynchrony in C++/WinRT.
XAML コントロール: C++/WinRT プロパティへのバインドXAML controls; bind to a C++/WinRT property XAML コントロールに効果的にバインドできるプロパティは、監視可能なプロパティと呼ばれます。A property that can be effectively bound to a XAML control is known as an observable property. このトピックでは、監視可能なプロパティを実装および使用する方法と、XAML コントロールをバインドする方法を示します。This topic shows how to implement and consume an observable property, and how to bind a XAML control to it.
XAML アイテム コントロール: C++/WinRT コレクションへのバインドXAML items controls; bind to a C++/WinRT collection XAML アイテム コントロールに効果的にバインドできるコレクションは、監視可能なコレクションと呼ばれます。A collection that can be effectively bound to a XAML items control is known as an observable collection. このトピックでは、監視可能なコレクションを実装および使用する方法と、それに XAML アイテム コントロールをバインドする方法を示します。This topic shows how to implement and consume an observable collection, and how to bind a XAML items control to it.
C++/WinRT による XAML カスタム (テンプレート化) コントロールXAML custom (templated) controls with C++/WinRT このトピックでは、C++/WinRT を使用して、シンプルなカスタム コントロールを作成する手順について説明します。This topic walks you through the steps of creating a simple custom control using C++/WinRT. ここに示されている情報に基づき、豊富な機能のカスタム可能な独自の UI コントロールを作成することができます。You can build on the info here to create your own feature-rich and customizable UI controls.
ABI 境界へのパラメーターの受け渡しPassing parameters into the ABI boundary C++/WinRT では、一般的なケースの自動変換を提供することによって、ABI 境界へのパラメーターの受け渡しが簡略化されます。C++/WinRT simplifies passing parameters into the ABI boundary by providing automatic conversions for common cases.
C++/WinRT での COM コンポーネントの使用Consume COM components with C++/WinRT このトピックでは、完全な Direct2D コードの例を使用し、C++/WinRT を使って COM クラスとインターフェイスを利用する方法を示します。This topic uses a full Direct2D code example to show how to use C++/WinRT to consume COM classes and interfaces.
C++/WinRT での COM コンポーネントの作成Author COM components with C++/WinRT C++/WinRT は、Windows Runtime クラスを作成するのに役立つのと同様に、従来の COM コンポーネントを作成するのに役立ちます。C++/WinRT can help you to author classic COM components, just as it helps you to author Windows Runtime classes.
C++/CX から C++/WinRT への移行Move to C++/WinRT from C++/CX このトピックでは、C++/CX コードを C++/WinRT の同等のコードに移植する方法について説明します。This topic shows how to port C++/CX code to its equivalent in C++/WinRT.
C++/WinRT と C++/CX 間の相互運用Interop between C++/WinRT and C++/CX このトピックでは、C++/CX と C++/WinRT オブジェクト間の変換に使用できる 2 つのヘルパー関数について説明します。This topic shows two helper functions that can be used to convert between C++/CX and C++/WinRT objects.
WRL から C++/WinRT への移行Move to C++/WinRT from WRL このトピックでは、Windows ランタイム C++ テンプレート ライブラリ (WRL) のコードを C++/WinRT の同等のコードに移植する方法について説明します。This topic shows how to port Windows Runtime C++ Template Library (WRL) code to its equivalent in C++/WinRT.
C# から C++/WinRT への移行Move to C++/WinRT from C# このトピックでは、C# コードを C++/WinRT の同等のコードに移植する方法について説明します。This topic shows how to port C# code to its equivalent in C++/WinRT.
C++/WinRT と ABI 間の相互運用Interop between C++/WinRT and the ABI このトピックでは、アプリケーション バイナリ インターフェイス (ABI) と C++/WinRT オブジェクト間の変換方法について説明します。This topic shows how to convert between application binary interface (ABI) and C++/WinRT objects.
C++/WinRT の強参照と弱参照Strong and weak references in C++/WinRT Windows ランタイムは参照カウント システムです。このようなシステムでは、強参照と弱参照の重要性とこれらの違いを認識することが重要です。The Windows Runtime is a reference-counted system; and in such a system it's important for you to know about the significance of, and distinction between, strong and weak references.
アジャイル オブジェクトAgile objects アジャイル オブジェクトは、いずれかのスレッドからアクセスできます。An agile object is one that can be accessed from any thread. お使いの C++/WinRT 型は既定ではアジャイルですが、オプトアウトできます。Your C++/WinRT types are agile by default, but you can opt out.
直接割当ての診断Diagnosing direct allocations このトピックでは、ヘルパーの winrt::make ファミリを使用するのではなく、スタック上に実装型のオブジェクトを作成するという間違いを診断するのに役立つ C++/WinRT 2.0 機能について詳しく説明します。This topic goes in-depth on a C++/WinRT 2.0 feature that helps you diagnose the mistake of creating an object of implementation type on the stack, rather than using the winrt::make family of helpers, as you should.
実装の種類の拡張ポイントExtension points for your implementation types C++/WinRT 2.0 のこれらの拡張ポイントを使用すると、実装の種類の破棄を延期したり、破棄中に安全にクエリを実行したり、プロジェクションが実行された方法に対してエントリをフックしたりすることができます。These extension points in C++/WinRT 2.0 allow you to defer destruction of your implementation types, to safely query during destruction, and to hook the entry into and exit from your projected methods.
単純な C++/WinRT Windows UI ライブラリの例A simple C++/WinRT Windows UI Library example このトピックでは、C++/WinRT プロジェクト内に WinUI の単純なサポートを追加する処理を順を追って説明します。This topic walks you through the process of adding simple support for WinUI within a C++/WinRT project.

C++ 言語に関するトピックTopics about the C++ language

トピックTopic 説明Description
値のカテゴリと、その参照Value categories, and references to them このトピックでは、C++ に存在する値のさまざまなカテゴリについて説明します。This topic describes the various categories of values that exist in C++. lvalues と rvalues については聞いたことがあると思いますが、それ以外の種類もあります。You will doubtless have heard of lvalues and rvalues, but there are other kinds, too.

重要な APIImportant APIs