C++/WinRT の概要Introduction to C++/WinRT

 

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 は、C++/CX 言語プロジェクション、および Windows ランタイム C++ テンプレート ライブラリ (WRL) に代わる、Microsoft で推奨されているものです。C++/WinRT is Microsoft's recommended replacement for the C++/CX language projection, and the Windows Runtime C++ Template Library (WRL). C++/WinRT に関するトピックの完全な一覧には、C++/CX と WRL との相互運用、C++/CX と WRL からの移行の両方に関する情報が含まれます。The full list of topics about C++/WinRT includes info about both interoperating with, and porting from, C++/CX and WRL.

重要

知っておくべき C++/WinRT の一部の最も重要な部分は、「C++/WinRT の SDK サポート」と「C++/WinRT、XAML、VSIX 拡張機能、NuGet パッケージの Visual Studio のサポート」のセクションで説明されています。Some of the most important pieces of C++/WinRT to be aware of are described in the sections SDK support for C++/WinRT and Visual Studio support for C++/WinRT, XAML, the VSIX extension, and the NuGet package.

言語プロジェクションLanguage projections

Windows ランタイムは、コンポーネント オブジェクト モデル (COM) API に基づいており、言語プロジェクションを使用してアクセスするよう設計されています。The Windows Runtime is based on Component Object Model (COM) APIs, and it's designed to be accessed through language projections. プロジェクションは、COM の詳細を隠し、特定の言語により自然なプログラミング エクスペリエンスを提供します。A projection hides the COM details, and provides a more natural programming experience for a given language.

Windows UWP API リファレンス コンテンツにおける C++/WinRT 言語プロジェクションThe C++/WinRT language projection in the Windows UWP API reference content

Windows UWP API の閲覧中に、右上隅の [言語] (Language) コンボ ボックスをクリックして [C++/WinRT] を選択し、API 構文ブロックを C++/WinRT 言語プロジェクションで表示されるように表示します。When you're browsing Windows UWP APIs, click the Language combo box in the upper right, and select C++/WinRT to view API syntax blocks as they appear in the C++/WinRT language projection.

C++/WinRT、XAML、VSIX 拡張機能、NuGet パッケージの Visual Studio のサポートVisual Studio support for C++/WinRT, XAML, the VSIX extension, and the NuGet package

Visual Studio のサポートでは、Visual Studio 2019 または Visual Studio 2017 が必要になります (バージョン 15.6 以上、Microsoft では 15.7 以上をお勧めします)。For Visual Studio support, you'll need Visual Studio 2019 or Visual Studio 2017 (at least version 15.6; we recommend at least 15.7). まだ行っていない場合は、Visual Studio インストーラー内から、( [インストールの詳細] > [ユニバーサル Windows プラットフォーム開発] で) [C++ (v14x) ユニバーサル Windows プラットフォーム ツール] オプションをインストールする必要もあります。From within the Visual Studio Installer, you'll also need to install (in Installation Details > Universal Windows Platform development) the C++ (v14x) Universal Windows Platform tools option(s), if you haven't already done so. また、Windows の [設定] > [更新 & セキュリティ] > [開発者向け] で、 [アプリのサイドロード] オプションではなく、 [開発者モード] オプションを選びます。And, in Windows Settings > Update & Security > For developers, choose the Developer mode option rather than the Sideload apps option.

最新バージョンの Visual Studio と Windows SDK で開発することをお勧めしますが、10.0.17763.0 (Windows 10、バージョン 1809) より前の Windows SDK に付属する C++/WinRT のバージョンを使用している場合、上記で示した Windows 名前空間ヘッダーを使用するには、10.0.17134.0 (Windows 10、バージョン 1803) のプロジェクトで最小の Windows SDK ターゲット バージョンが必要になります。While we recommend that you develop with the latest versions of Visual Studio and the Windows SDK, if you're using a version of C++/WinRT that shipped with the Windows SDK prior to 10.0.17763.0 (Windows 10, version 1809), then, to use the the Windows namespaces headers mentioned above, you'll need a minimum Windows SDK target version in your project of 10.0.17134.0 (Windows 10, version 1803).

Visual Studio Marketplace から最新バージョンの C++/WinRT Visual Studio 拡張機能 (VSIX) をダウンロードしてインストールする必要があります。You'll want to download and install the latest version of the C++/WinRT Visual Studio Extension (VSIX) from the Visual Studio Marketplace.

  • VSIX 拡張機能では、C++/WinRT 開発を開始できるように、Visual Studio で C++/WinRT プロジェクトとアイテム テンプレートが提供されます。The VSIX extension gives you C++/WinRT project and item templates in Visual Studio, so that you can get started with C++/WinRT development.
  • さらに、これにより、C++/WinRT の投影された型の Visual Studio ネイティブのデバッグの視覚化 (NatVis) が提供され、C# デバッグと同様のエクスペリエンスを実現します。In addition, it gives you Visual Studio native debug visualization (natvis) of C++/WinRT projected types; providing an experience similar to C# debugging. Natvis はデバッグ ビルドで自動で行われます。Natvis is automatic for debug builds. シンボル WINRT_NATVIS を定義することで、リリース ビルドを選択できます。You can opt into it release builds by defining the symbol WINRT_NATVIS.

C++/WinRT 用の Visual Studio プロジェクト テンプレートは、以下のセクションで説明されます。The Visual Studio project templates for C++/WinRT are described in the sections below. 最新バージョンの VSIX 拡張機能がインストールされた新しい C++/WinRT プロジェクトを作成する場合、新しい C++/WinRT プロジェクトで自動的に Microsoft.Windows.CppWinRT NuGet パッケージがインストールされます。When you create a new C++/WinRT project with the latest version of the VSIX extension installed, the new C++/WinRT project automatically installs the Microsoft.Windows.CppWinRT NuGet package. Microsoft.Windows.CppWinRT NuGet パッケージでは、C++/WinRT のビルド (MSBuild プロパティとターゲット) がサポートされ、自分のプロジェクトを (NuGet パッケージのみ (VSIX 拡張機能以外) がインストールされる) 開発マシンとビルド エージェントとの間で移植できるようになります。The Microsoft.Windows.CppWinRT NuGet package provides C++/WinRT build support (MSBuild properties and targets), making your project portable between a development machine and a build agent (on which only the NuGet package, and not the VSIX extension, is installed).

重要

1.0.190128.4 より前の VSIX 拡張機能のバージョンで作成された (作業するためにアップグレードされた) プロジェクトがある場合は、「VSIX 拡張機能の以前のバージョン」を参照してください。If you have projects that were created with (or upgraded to work with) a version of the VSIX extension earlier than 1.0.190128.4, then see Earlier versions of the VSIX extension. そのセクションには、プロジェクトの構成に関する重要な情報が含まれ、最新バージョンの VSIX 拡張機能を使用するためにアップグレードする必要があるものを把握します。That section contains important info about the configuration of your projects, which you'll need to know to upgrade them to use the latest version of the VSIX extension.

注意

C++/WinRT では C++17 標準の機能が使用されるので、NuGet パッケージでは Visual Studio でプロジェクト プロパティの [C/C++] > [言語] > [C++ 言語標準] > [ISO C++17 標準 (/std:c++17)] を設定します。Because C++/WinRT uses features from the C++17 standard, the NuGet package sets project property C/C++ > Language > C++ Language Standard > ISO C++17 Standard (/std:c++17) in Visual Studio. これにより、/bigobj コンパイラ オプションも追加されます。It also adds the /bigobj compiler option.

Conformance mode:Yes (/permissive-) を設定する可能性もあり、これはコードを標準に準拠しているようにさらに制限します。You might also want to set Conformance mode: Yes (/permissive-), which further constrains your code to be standards-compliant. 注意すべきもう 1 つのプロジェクト プロパティは、 [C/C++] > [全般] > [警告をエラーとして扱う] です。Another project property to be aware of is C/C++ > General > Treat Warnings As Errors. これをユーザーの好みに合わせて [はい (/WX)] または [いいえ (/WX-)] に設定します。Set this to Yes(/WX) or No (/WX-) to taste. 場合によっては、cppwinrt.exe ツールによって生成されたソース ファイルは、それらに実装を追加するまで警告を生成します。Sometimes, source files generated by the cppwinrt.exe tool generate warnings until you add your implementation to them.

上記で説明されているように設定されたシステムでは、Visual Studio で C++/WinRT プロジェクトを作成してビルドし (または開いて)、展開することができます。With your system set up as described above, you'll be able to create and build, or open, a C++/WinRT project in Visual Studio, and deploy it.

または、Microsoft.Windows.CppWinRT NuGet パッケージを手動でインストールすることで、既存のプロジェクトを変換できます。Alternatively, you can convert an existing project by manually installing the Microsoft.Windows.CppWinRT NuGet package. 最新バージョンの VSIX 拡張機能をインストール (または更新) した後、Visual Studio で既存のプロジェクトを開いて、 [プロジェクト] > [NuGet パッケージの管理] > [参照] の順にクリックし、検索ボックスに「Microsoft.Windows.CppWinRT」を入力するか貼り付けます。検索結果の項目を選択し、 [インストール] をクリックしてそのプロジェクトのパッケージをインストールします。After installing (or updating to) the latest version of the VSIX extension, open the existing project in Visual Studio, click Project > Manage NuGet Packages... > Browse, type or paste Microsoft.Windows.CppWinRT in the search box, select the item in search results, and then click Install to install the package for that project. そのパッケージを追加したら、cppwinrt.exe ツールの呼び出しを含む、プロジェクトの C++/WinRT MSBuild サポートを取得できます。Once you've added the package, you'll get C++/WinRT MSBuild support for the project, including invoking the cppwinrt.exe tool. バージョン 2.0 の Microsoft.Windows.CppWinRT NuGet パッケージには、cppwinrt.exe ツールが含まれます。As of version 2.0, the Microsoft.Windows.CppWinRT NuGet package includes the cppwinrt.exe tool.

cppwinrt.exe ツールは Windows ランタイム メタデータ (.winmd) ファイルでポイントして、C++/WinRT コードから使用するためのメタデータに記述されている API を投影するヘッダー ファイル ベースの標準的な C++ ライブラリを生成することができます。You can point the cppwinrt.exe tool at a Windows Runtime metadata (.winmd) file to generate a header-file-based standard C++ library that projects the APIs described in the metadata for consumption from C++/WinRT code. Windows ランタイム メタデータ (.winmd) ファイルは、Windows ランタイム API サーフェスを記述する正規の方法を提供します。Windows Runtime metadata (.winmd) files provide a canonical way of describing a Windows Runtime API surface. メタデータで cppwinrt.exe をポイントすることで、セカンド パーティまたはサード パーティの Windows ランタイム コンポーネントに実装された、または独自のアプリケーションに実装された任意のランタイム クラスで使用するためのライブラリを生成することができます。By pointing cppwinrt.exe at metadata, you can generate a library for use with any runtime class implemented in a second- or third-party Windows Runtime component, or implemented in your own application. 詳細については、「C++/WinRT での API の使用」を参照してください。For more info, see Consume APIs with C++/WinRT.

C++/WinRT では、COM スタイルのプログラミングを使用せずに、標準的な C++ を使用して独自のランタイム クラスを実装することもできます。With C++/WinRT, you can also implement your own runtime classes using standard C++, without resorting to COM-style programming. ランタイム クラスでは、IDL ファイルで型を記述するだけです。midl.exe および cppwinrt.exe が実装のスケルトン ソース コード ファイルを自動的に作成します。For a runtime class, you just describe your types in an IDL file, and midl.exe and cppwinrt.exe generate your implementation boilerplate source code files for you. または、C++/WinRT の基本クラスから派生することでインターフェイスを実装することもできます。You can alternatively just implement interfaces by deriving from a C++/WinRT base class. 詳細については、「C++/WinRT での API の作成」を参照してください。For more info, see Author APIs with C++/WinRT.

プロジェクト内にインストールされた Microsoft.Windows.CppWinRT NuGet パッケージのプレゼンスによって、C++/WinRT MSBuild サポートを使用するプロジェクトを識別できます。You can identify a project that uses the C++/WinRT MSBuild support by the presence of the Microsoft.Windows.CppWinRT NuGet package installed within the project.

VSIX 拡張機能によって提供される Visual Studio プロジェクト テンプレートを次に示します。Here are the Visual Studio project templates provided by the VSIX extension.

空のアプリ (C++/WinRT)Blank App (C++/WinRT)

XAML ユーザー インターフェイスを持つユニバーサル Windows プラットフォーム (UWP) アプリのプロジェクト テンプレートです。A project template for a Universal Windows Platform (UWP) app that has a XAML user-interface.

Visual Studio では、各 XAML マークアップ ファイルの背後にあるインターフェイス定義言語 (IDL) (.idl) ファイルから実装とヘッダーのスタブを生成するために XAML コンパイラ サポートを提供します。Visual Studio provides XAML compiler support to generate implementation and header stubs from the Interface Definition Language (IDL) (.idl) file that sits behind each XAML markup file. IDL ファイルで、アプリの XAML ページ内で参照する任意のローカルのランタイム クラスを定義してから、プロジェクトを 1 回ビルドして Generated Files で実装テンプレート、Generated Files\sources でスタブ型定義を生成します。In an IDL file, define any local runtime classes that you want to reference in your app's XAML pages, and then build the project once to generate implementation templates in Generated Files, and stub type definitions in Generated Files\sources. 次にローカルのランタイム クラスの実装への参照にこれらのスタブ型定義を使用します。Then use those the stub type definitions for reference to implement your local runtime classes. 各ランタイム クラスをその独自の IDL ファイル内で宣言することをお勧めします。We recommend that you declare each runtime class in its own IDL file.

C++/WinRT に対する Visual Studio 2019 での XAML デザイン サーフェスのサポートは、C# でのパリティに近いです。The XAML design surface support in Visual Studio 2019 for C++/WinRT is close to parity with C#. Visual Studio 2019 では、 [プロパティ] ウィンドウの [イベント] タブを使用して、C++/WinRT プロジェクト内にイベント ハンドラーを追加できます。In Visual Studio 2019, you can use the Events tab of the Properties window to add event handlers within a C++/WinRT project. また、自分のコードに手動でイベント ハンドラーを追加することもできます—詳細については、「C++/WinRT でのデリゲートを使用したイベントの処理」を参照してください。You can also add event handlers to your code manually—see Handle events by using delegates in C++/WinRT for more info.

コア アプリ (C++/WinRT)Core App (C++/WinRT)

XAML を使用しないユニバーサル Windows プラットフォーム (UWP) アプリのプロジェクト テンプレートです。A project template for a Universal Windows Platform (UWP) app that doesn't use XAML.

代わりに、Windows.ApplicationModel.Core 名前空間に C++/WinRT Windows 名前空間ヘッダーを使用します。Instead, it uses the C++/WinRT Windows namespace header for the Windows.ApplicationModel.Core namespace. ビルドおよび実行した後に、空の領域をクリックして色付きの正方形を追加し、色付きの正方形をクリックしてそれをドラッグします。After building and running, click on an empty space to add a colored square; then click on a colored square to drag it.

Windows コンソール アプリケーション (C++/WinRT)Windows Console Application (C++/WinRT)

コンソールのユーザー インターフェイスを含む、Windows デスクトップの C++/WinRT クライアント アプリケーションのプロジェクト テンプレートです。A project template for a C++/WinRT client application for Windows Desktop, with a console user-interface.

Windows デスクトップ アプリケーション (C++/WinRT)Windows Desktop Application (C++/WinRT)

Windows Desktop 用の C++/WinRT クライアント アプリケーションに対するプロジェクト テンプレートでは、Win32 MessageBox 内に Windows ランタイム Windows.Foundation.Uri が表示されます。A project template for a C++/WinRT client application for Windows Desktop, which displays a Windows Runtime Windows.Foundation.Uri inside a Win32 MessageBox.

Windows ランタイム コンポーネント (C++/WinRT)Windows Runtime Component (C++/WinRT)

通常はユニバーサル Windows プラットフォーム (UWP) から使用するための、コンポーネントのプロジェクト テンプレートです。A project template for a component; typically for consumption from a Universal Windows Platform (UWP).

このテンプレートは、Windows ランタイム メタデータ (.winmd) が IDL から生成され、実装とヘッダーのスタブが Windows ランタイム メタデータから生成される、midl.exe > cppwinrt.exe ツール チェーンを示します。This template demonstrates the midl.exe > cppwinrt.exe toolchain, where Windows Runtime metadata (.winmd) is generated from IDL, and then implementation and header stubs are generated from the Windows Runtime metadata.

IDL ファイルでは、コンポーネント、それらの既定インターフェイス、およびそれらが実装している他のすべてのインターフェイスのランタイム クラスを定義します。In an IDL file, define the runtime classes in your component, their default interface, and any other interfaces they implement. プロジェクトを 1 回ビルドして module.g.cppmodule.h.cppGenerated Files の実装テンプレート、および Generated Files\sources のスタブ型定義を生成します。Build the project once to generate module.g.cpp, module.h.cpp, implementation templates in Generated Files, and stub type definitions in Generated Files\sources. 次にコンポーネント内のランタイム クラスの実装への参照にこれらのスタブ型定義を使用します。Then use those the stub type definitions for reference to implement the runtime classes in your component. 各ランタイム クラスをその独自の IDL ファイル内で宣言することをお勧めします。We recommend that you declare each runtime class in its own IDL file.

ビルドした Windows ランタイム コンポーネントのバイナリとその .winmd を、それらを使用する UWP アプリとバンドルします。Bundle the built Windows Runtime Component binary and its .winmd with the UWP app consuming them.

VSIX 拡張機能の以前のバージョンEarlier versions of the VSIX extension

最新バージョンの VSIX 拡張機能をインストール (またはアップグレード) することをお勧めします。We recommend that you install (or update to) the latest version of the VSIX extension. 既定では、それ自体で更新されるように構成されています。It is configured to update itself by default. これを行い、1.0.190128.4 以前の VSIX 拡張機能のバージョンで作成されたプロジェクトがある場合、このセクションには新しいバージョンで動作するように、これらのプロジェクトのアップグレードに関する重要な情報が含まれます。If you do that, and you have projects that were created with a version of the VSIX extension earlier than 1.0.190128.4, then this section contains important info about upgrading those projects to work with the new version. 更新しない場合は、引き続きこのセクションでの情報が役に立つことがわかります。If you don't update, then you'll still find the info in this section useful.

サポートされる Windows SDK と Visual Studio のバージョン、Visual Studio の構成に関して、上記の「C++/WinRT、XAML、VSIX 拡張機能、NuGet パッケージの Visual Studio のサポート」セクションの情報は、以前のバージョンの VSIX 拡張機能に適用されます。In terms of supported Windows SDK and Visual Studio versions, and Visual Studio configuration, the info in the Visual Studio support for C++/WinRT, XAML, the VSIX extension, and the NuGet package section above applies to earlier versions of the VSIX extension. 下記の情報は、以前のバージョンで作成された (または作業を行うためにアップグレードされた) 動作とプロジェクトの構成に関して重要な違いについて説明します。The info below describes important differences regarding the behavior and configuration of projects created with (or upgraded to work with) earlier versions.

1.0.181002.2 より前に作成Created earlier than 1.0.181002.2

プロジェクトが 1.0.181002.2 より前の VSIX 拡張機能のバージョンで作成された場合、C++/WinRT ビルドのサポートはそのバージョンの VSIX 拡張機能に組み込まれます。If your project was created with a version of the VSIX extension earlier than 1.0.181002.2, then C++/WinRT build support was built into that version of the VSIX extension. ご利用のプロジェクトには、.vcxproj ファイルに <CppWinRTEnabled>true</CppWinRTEnabled> プロパティ セットがあります。Your project has the <CppWinRTEnabled>true</CppWinRTEnabled> property set in the .vcxproj file.

<Project ...>
    <PropertyGroup Label="Globals">
        <CppWinRTEnabled>true</CppWinRTEnabled>
...

Microsoft.Windows.CppWinRT NuGet パッケージを手動でインストールすることで、自分のプロジェクトをアップグレードできます。You can upgrade your project by manually installing the Microsoft.Windows.CppWinRT NuGet package. 最新バージョンの VSIX 拡張機能をインストール (またはアップグレード) した後、Visual Studio で自分のプロジェクトを開いて、 [プロジェクト] > [NuGet パッケージの管理] > [参照] の順にクリックし、検索ボックスに「Microsoft.Windows.CppWinRT」を入力するか貼り付けます。検索結果の項目を選択し、 [インストール] をクリックして自分のプロジェクトのパッケージをインストールします。After installing (or upgrading to) the latest version of the VSIX extension, open your project in Visual Studio, click Project > Manage NuGet Packages... > Browse, type or paste Microsoft.Windows.CppWinRT in the search box, select the item in search results, and then click Install to install the package for your project.

1.0.181002.2 から 1.0.190128.3 の間で作成 (またはアップグレード)Created with (or upgraded to) between 1.0.181002.2 and 1.0.190128.3

プロジェクトが 1.0.181002.2 から 1.0.190128.3 (含む) の間の VSIX 拡張機能のバージョンで作成された場合、Microsoft.Windows.CppWinRT NuGet パッケージはプロジェクト テンプレートによってプロジェクトに自動的にインストールされています。If your project was created with a version of the VSIX extension between 1.0.181002.2 and 1.0.190128.3, inclusive, then the Microsoft.Windows.CppWinRT NuGet package was installed in the project automatically by the project template. この範囲の VSIX 拡張機能のバージョンを使用するために、以前のプロジェクトをアップグレードしている可能性もあります。You might also have upgraded an older project to use a version of the VSIX extension in this range. この操作を行った場合、—ビルドのサポートは引き続きこの範囲内の VSIX 拡張機能のバージョンでも表されるため—ご利用のアップグレードされたプロジェクトでは Microsoft.Windows.CppWinRT NuGet パッケージをインストールしている、またはしていない可能性があります。If you did, then—since build support was also still present in versions of the VSIX extension in this range—your upgraded project may or may not have the Microsoft.Windows.CppWinRT NuGet package installed.

プロジェクトをアップグレードするには、前のセクションの手順に従って、自分のプロジェクトに確実に Microsoft.Windows.CppWinRT NuGet パッケージをインストールします。To upgrade your project, follow the instructions in the previous section and ensure that your project does have the Microsoft.Windows.CppWinRT NuGet package installed.

無効なアップグレードの構成Invalid upgrade configurations

最新バージョンの VSIX 拡張機能では、Microsoft.Windows.CppWinRT NuGet パッケージもインストールされていない場合は、プロジェクトで <CppWinRTEnabled>true</CppWinRTEnabled> プロパティを含めることはできません。With the latest version of the VSIX extension, it's not valid for a project to have the <CppWinRTEnabled>true</CppWinRTEnabled> property if it doesn't also have the Microsoft.Windows.CppWinRT NuGet package installed. この構成のプロジェクトでは、ビルド エラー メッセージの "The C++/WinRT VSIX no longer provides project build support.A project with this configuration produces the build error message, "The C++/WinRT VSIX no longer provides project build support. Please add a project reference to the Microsoft.Windows.CppWinRT Nuget package" (C++/WinRT VSIX ではプロジェクトのビルドがサポートされなくなりました。Microsoft.Windows.CppWinRT Nuget パッケージへのプロジェクト参照を追加してください) が生成されます。Please add a project reference to the Microsoft.Windows.CppWinRT Nuget package."

上記で説明したように、C++/WinRT プロジェクトでは NuGet パッケージがインストールされている必要があるようになりました。As mentioned above, a C++/WinRT project now needs to have the NuGet package installed in it.

<CppWinRTEnabled> 要素は古くなったため、必要に応じて .vcxproj を編集して、要素を削除できます。Since the <CppWinRTEnabled> element is now obsolete, you can optionally edit your .vcxproj, and delete the element. 厳密には必要ではありませんが、これはオプションです。It's not strictly necessary, but it's an option.

また、.vcxproj には <RequiredBundles>$(RequiredBundles);Microsoft.Windows.CppWinRT</RequiredBundles> が含まれる場合は、C++/WinRT VSIX 拡張機能をインストールすることなく、ビルドできるように、これを削除できます。Also, if your .vcxproj contains <RequiredBundles>$(RequiredBundles);Microsoft.Windows.CppWinRT</RequiredBundles>, then you can remove it so that you can build without requiring the C++/WinRT VSIX extension to be installed.

C++/WinRT の SDK サポートSDK support for C++/WinRT

これは互換性の理由のためのみで示されていますが、バージョン 10.0.17134.0 (Windows 10 バージョン 1803) の時点で、Windows SDK には、ファーストパーティ Windows API (Windows 名前空間の Windows ランタイム API) を使用するためのヘッダー ファイル ベースの標準的な C++ ライブラリが含まれています。Although it is now present only for compatibility reasons, as of version 10.0.17134.0 (Windows 10, version 1803), the Windows SDK contains a header-file-based standard C++ library for consuming first-party Windows APIs (Windows Runtime APIs in Windows namespaces). それらのヘッダーは %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt フォルダー内にあります。Those headers are inside the folder %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt. Windows SDK バージョン 10.0.17763.0 (Windows 10、バージョン 1809) の時点で、これらのヘッダーは、プロジェクト内の $(GeneratedFilesDir) フォルダー内で生成されます。As of the Windows SDK version 10.0.17763.0 (Windows 10, version 1809), these headers are generated for you inside your project's $(GeneratedFilesDir) folder.

繰り返しになりますが、互換性のために、Windows SDK は cppwinrt.exe ツールにも付属しています。Again for compatibility, the Windows SDK also comes with the cppwinrt.exe tool. しかし、代わりに最新バージョンの cppwinrt.exe をインストールして使用することをお勧めします。これは、Microsoft.Windows.CppWinRT NuGet パッケージに含まれています。However, we recommend that you instead install and use the most recent version of cppwinrt.exe, which is included with the Microsoft.Windows.CppWinRT NuGet package. そのパッケージ (および cppwinrt.exe) は、上記のセクションで説明されています。That package, and cppwinrt.exe, are described in the sections above.

C++/WinRT プロジェクションにおけるカスタム型Custom types in the C++/WinRT projection

自分の C++/WinRT プログラミングで、標準 C++ 言語機能および標準 C++ データ型と C++/WinRT を使用できます—一部の C++ 標準ライブラリのデータ型を含みます。In your C++/WinRT programming, you can use standard C++ language features and Standard C++ data types and C++/WinRT—including some C++ Standard Library data types. ただし、プロジェクションでいくつかのカスタム データ型を認識するようになり、それらを使用することもできます。But you'll also become aware of some custom data types in the projection, and you can choose to use them. たとえば、C++/WinRT の概要 のクイックスタートのコード例では winrt::hstring を使用しています。For example, we use winrt::hstring in the quick-start code example in Get started with C++/WinRT.

winrt::com_array は、あるポイントで使用する可能性が高い別の型です。winrt::com_array is another type that you're likely to use at some point. ただし、winrt::array_view などの型を直接使用する可能性は低いです。But you're less likely to directly use a type such as winrt::array_view. または、対応する型が C++ 標準ライブラリに現れた場合に変更すべきコードがないように、使用しないことを選択する場合もあります。Or you may choose not to use it so that you won't have any code to change if and when an equivalent type appears in the C++ Standard Library.

警告

C++/WinRT Windows 名前空間ヘッダーをよく調査すると見つかる可能性がある型もあります。There are also types that you might see if you closely study the C++/WinRT Windows namespace headers. 例として winrt::param::hstring がありますが、コレクションの例もあります。An example is winrt::param::hstring, but there are collection examples too. これらは入力パラメーターのバインディングを最適化するためにのみ存在し、大幅に改善したパフォーマンスをもたらし、関連する標準的な C++ の型とコンテナーでほとんどの呼び出しパターンが "そのまま機能する" ようにします。These exist solely to optimize the binding of input parameters, and they yield big performance improvements and make most calling patterns "just work" for related standard C++ types and containers. これらの型は、ほとんどの値を追加する場合にプロジェクションでのみ使用されます。These types are only ever used by the projection in cases where they add most value. 高度に最適化され、一般的な用途で使用するものではありません。それらの型を自分で使用しないようにしてください。They're highly optimized and they're not for general use; don't be tempted to use them yourself. また、winrt::impl 名前空間からは何も使用しないでください。それらは実装型であるため、変更されることがあります。Nor should you use anything from the winrt::impl namespace, since those are implementation types, and therefore subject to change. 引き続き標準型を使用するか、または winrt 名前空間の型を使用する必要があります。You should continue to use standard types, or types from the winrt namespace.

重要な APIImportant APIs