C++/WinRT
C ++ / WinRTは、MicrosoftのWindowsランタイムプラットフォーム用のC ++ライブラリであり、最新のWindowsAPIへのアクセスを提供するように設計されています。C ++ / WinRTは、C ++の拡張機能で最新バージョンのMicrosoftVisual C ++を必要とするC ++ / CXとは異なり、標準のC ++ 17ヘッダーファイルライブラリとして提供されます。
C ++ / WinRT
原作者
ケニー・カー
開発者
マイクロソフト
初回リリース
2015年6月23日(6年前) (2015-06-23)
安定リリース
2.0.210503.1 / 2021年5月3日 ; 7か月前 (2021-05-03)
リポジトリ
github .com / Microsoft / cppwinrt
で書かれている
C ++
オペレーティング・システム
マイクロソフトウィンドウズ
前任者
C ++ / CX、WRL
タイプ
ソフトウェア開発ツール
ライセンス
MITライセンス
Webサイト
docs .microsoft .com / windows / uwp / cpp-and-winrt-apis /
C ++ / WinRTは、バージョン10.0.17134.0(Windows 10、バージョン1803)でMicrosoft Windows SDKの一部として導入され、Windows App SDK(旧称Project Reunion)のコンポーネントです。C ++ / WinRTに対するMicrosoftVisual Studioのサポートは、公式にサポートされている拡張機能によって提供されます。
C ++ / WinRTは、2015年にKenny Kerrによって最初にリリースされました。KennyKerrは、その後すぐにMicrosoftに加わりました。 C ++ / WinRTは、WindowsランタイムC ++テンプレートライブラリ(WRL)とC ++ / CXの両方の代わりにMicrosoftが推奨するものになりました。
コンテンツ
1 概要
2 歴史
3 参考文献
4 外部リンク
概要
MicrosoftのWindowsランタイムは、コンポーネントオブジェクトモデル(COM)APIに基づいており、言語プロジェクションを介してアクセスできるように設計されています。言語プロジェクションはCOMの詳細を隠し、特定の言語に対してより自然なプログラミング体験を提供します。C ++開発者にとって、C ++ / WinRTは、公式にサポートされている最新のC ++言語プロジェクションです。
バージョン10.0.17134.0(Windows 10、バージョン1803)の時点で、Microsoft Windows SDKには、ファーストパーティのWindows API(つまり、WindowsネームスペースのWindowsランタイム API)を使用するためのヘッダーファイルベースの標準C ++ライブラリが含まれています。 C ++ / WinRTにはcppwinrt.exeツールも付属しています。このツールは、Windowsランタイムメタデータ(.winmd)ファイルをポイントして、メタデータに記述されているAPIをC ++ /から使用するために投影するヘッダーファイルベースの標準C ++ライブラリを生成できます。WinRTコード。Windowsランタイムメタデータ(.winmd)ファイルは、WindowsランタイムAPIサーフェスを記述するための標準的な方法を提供します。cppwinrt.exeツールをメタデータに向けることで、ユーザーは、サードパーティまたはサードパーティのWindowsランタイムコンポーネントに実装された、または独自のアプリケーションに実装されたランタイムクラスで使用するライブラリを生成できます。
C ++ / WinRTを使用すると、ユーザーはCOMスタイルのプログラミングに頼ることなく、標準のC ++を使用して独自のランタイムクラスを実装することもできます。ランタイムクラスの場合、型はMIDLファイル(.idl)で記述でき、そのファイルからツールmidl.exeとcppwinrt.exeツールが実装ボイラープレートソースコードファイルを生成し、ユーザーが独自の実装を追加できるようにします。または、C ++ / WinRTヘッダーライブラリの一部である基本クラスから派生することでインターフェイスを実装することもできます。これらの手法では、静的ディスパッチを介した関数呼び出しに、不思議なことに繰り返されるテンプレートパターンを採用しています。C ++ / WinRTは、最新のISO C ++ 11(およびそれ以降)の言語機能のホストを利用して、生産性と実行時のパフォーマンスを向上させます。これらの機能は、C ++ / WinRTの前身(WRLおよびC ++ / CX)が設計されたときには利用できませんでした。
標準のC ++データ型、アルゴリズム、およびキーワードは、C ++ / WinRTで使用されます。ただし、プロジェクションには独自のカスタムデータ型も
C ++ / WinRTは、Windowsランタイムの他の言語オプションよりも小さいバイナリを生成します。
歴史
C ++ / WinRTの設計と開発は、当時独立していたソフトウェア開発者のKennyKerrによって2014年に開始されました。当時、開発者がC ++を使用してWindowsランタイムAPIを呼び出すための一般的な方法は、C ++ / CX言語プロジェクションを使用することでした。C ++ / CXは、C ++ / CLIから継承されたref newand ^(hat)表記など、非標準の拡張機能をC ++言語に追加します。ISO C ++言語機能の進歩により、拡張機能なしで標準C ++用のWindowsランタイム言語プロジェクションを設計できるようになったということは十分に理解されていませんでした。「マイクロソフトには、C ++とCOMで数十年のキャリアを費やしてきた経験豊富なC ++開発者がたくさんいます」とKerr氏は言います。「とにかくそれを試して、それが機能することを示すことは不可能であることに気づかなかった誰かがかかったと思います。」
「以前にCOMAPIを最新のC ++に投影した経験があったので、同じ手法をWindowsランタイムに適用できるかどうかを確認することにしました。」C ++ / WinRTの開発における初期の課題の1つは、WindowsランタイムがJavaScriptとマネージド.NET言語のプロジェクションをサポートするために行うトレードオフを管理することでした。ジェネリックコレクションが言語プロジェクション全体で機能する方法の複雑さは、これらの設計上の課題のもう1つの例であり、標準のC ++でWindowsランタイムのインターフェイスバージョン管理モデルを処理する効率的な方法を考え出していました。「当時のC ++の理解は本当に深まりました。それ以来、Microsoft Visual C ++コンパイラは、この規模でこのような手法をより効率的に処理できるようになりました。」
参考文献
^ カー、ケニー; マクネリス、ジェームズ
「CppCon2016:Windowsランタイム用の標準C ++の採用」。チャネル9。Microsoft 。
^ カー、ケニー。「Windowsランタイム用の最新のC ++」。GitHub 。
^ 「C ++ / WinRTパッケージ」。NuGet。Microsoft 。
^ ホワイト、スティーブン
「C ++ / WinRTの紹介」。Windows DevCenter。Microsoft 。
^ 「C ++ / WinRT VisualStudio拡張機能」。Visual StudioMarketplace。Microsoft 。
^ smond、Michael。「OutsideIn:KennyKerrがC ++ / WinRTをMicrosoftにもたらした方法」。MSDNマガジン。Microsoft 。
外部リンク
ウィキブックスには、次のトピックに関する本がWindowsプログラミング
C ++ / WinRT-UWPアプリ開発者| Microsoft Docs
ケニー・カーのブログ
C ++ / WinRT Visual Studio Extension
Visual StudioMarketplace。
Microsoftインターフェイス定義言語3.0の概要