知識マップ: WinRTはCOMである ── IInspectable・.winmd・言語プロジェクション、そしてWinUIが今もバイナリ契約の上に乗っている理由

記事「WinRTはCOMである ── IInspectable・.winmd・言語プロジェクション、そしてWinUIが今もバイナリ契約の上に乗っている理由」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

WinRT(Windows Runtime)はマネージドランタイムではなく、COMを土台にしたABIにメタデータ(.winmd)と言語プロジェクションを足したものです。すべてのWinRTインターフェースはIInspectableを要求し、IInspectableはIUnknownを要求します。QueryInterface・AddRef・Releaseは今もすべての呼び出しの土台であり、IInspectableが追加するのはGetIids・GetRuntimeClassName・GetTrustLevelの3メソッドだけです。GetRuntimeClassNameが返す型名をメタデータで解決できることが言語プロジェクションを可能にしています。.winmdはECMA-335(CLRアセンブリと同じ)の物理形式を借りた機械可読メタデータで、システム提供のものは実行コードを含みません。C++/WinRTとC#/WinRT(CsWinRT)はこのメタデータから各言語の慣用に沿ったAPIを生成する投影であり、.NET 5で組み込みWinRTサポートが削除されて以降、C#の投影は独立したツールチェーンになりました。WinRT APIの大半はWPF・WinForms・Win32のデスクトップアプリから呼べますが、ピッカーなどCoreWindow依存のUI系クラスは表示前にIInitializeWithWindow(共有UIのDataTransferManagerは専用のIDataTransferManagerInterop)でオーナーウィンドウのHWNDを渡す必要があり、通知履歴などpackage identity必須のAPIはMSIXまたは外部の場所を指すパッケージによるパッケージ化を要求し、スレッドは事前のWinRT用初期化が必要です(ネイティブコードではRoInitializeやwinrt::init_apartmentでSTA/MTAの並行性モデルを指定し、C#のWPF/WinFormsアプリでは通常ランタイム側が処理します)。WinUIはWindows App SDKの一部として提供されるWinRT ABIの上のUIフレームワークで、既存WPF/WinForms画面へのWinUIコントロールの段階混在(XAML Islands)は世代ごとに対応と制約が異なります。

WinRTとCOMの知識マップWinRTがCOMを前提としIInspectableと.winmdを利用する構造、すべてのWinRTインターフェースが要求するIInspectableがIUnknownを前提とすること、.winmdがECMA-335形式を利用し言語プロジェクションがそれを読むこと、C++/WinRTとC#/WinRTが言語プロジェクションの実装を担い、C#/WinRTが.NET組み込みWinRTサポートの後継であること、WinUIがWindows App SDKとWinRTを前提とすること、CoreWindow依存のWinRT UIがデスクトップアプリではIInitializeWithWindowなどUI固有のinteropによるHWNDの受け渡しを前提とすること、package identity必須のWinRT APIがpackage identityを前提とし、それがMSIXまたは外部の場所を指すパッケージで構成できること、RoInitializeがSTA/MTAというCOMのアパートメントモデルを利用すること、既存WPF/WinFormsへのWinUI段階移行が制約付きのXAML Islandsを利用することを示す図前提とする前提とする前提とする利用する利用する利用する実装を担う実装を担うの後継前提とする前提とする前提とする利用する前提とする利用する前提とするで構成できるで構成できる利用する利用するWinRT(Windows Runtime)COM(コンポーネントオブジェクトモデル)IInspectableIUnknownWindows Metadata(.winmd)ECMA-335言語プロジェクションC++/WinRTC#/WinRT(CsWinRT).NET組み込みWinRTサポートWinUI(Windows App SDK)Windows App SDKCoreWindow依存のWinRT UIIInitializeWithWindowHWND(ウィンドウハンドル)IDataTransferManagerInteroppackage identity必須のWinRT APIpackage identityMSIXパッケージング(packaged)外部の場所を指すpackaged(sparse package)RoInitializeCOMアパートメントモデル(STA/MTA)既存WPF/WinFormsへのWinUI段階移行XAML Islands

概念間の関係(全20件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

WinRT(Windows Runtime)
Windows 8で導入された、COMを土台にしたストアアプリ向けの新しいAPI基盤。
IInspectable
すべてのWinRTクラスが実装する基底インターフェース。IUnknownを継承し、GetIids・GetRuntimeClassName・GetTrustLevelの3メソッドを追加する。
Windows Metadata(.winmd)
WinRT APIを記述する機械可読メタデータファイル。ツールと言語プロジェクションがこれを読んで投影を生成する。
言語プロジェクション
WinRT APIを特定のプログラミング言語の慣用に沿って公開する仕組み。COMの詳細を隠し、その言語にとって自然なプログラミング体験を提供する。
C++/WinRT
標準C++17で実装されたヘッダーファイルベースのWinRT言語プロジェクション。cppwinrt.exeが.winmdから投影ヘッダーを生成する。
C#/WinRT(CsWinRT)
.NET向けのWinRT言語プロジェクション。cswinrt.exeが.winmdを処理してC#の相互運用アセンブリを生成する。
WinUI(Windows App SDK)
Windows App SDKベースのUIフレームワーク。Windows 11のモダンなUIに沿った外観と、Microsoft Store/MSIXとの親和性を持つ。動作対象はWindows 10 バージョン1809(ビルド17763)以降で、Windows 11専用ではない。
CoreWindow依存のWinRT UI
ピッカーやダイアログなど、表示にUWPのCoreWindowを前提とするWinRTクラス群。デスクトップアプリでは追加の相互運用が必要になる。
IInitializeWithWindow
デスクトップアプリで使われるWinRTオブジェクトにオーナーウィンドウ(HWND)を渡すためのCOMインターフェース。
IDataTransferManagerInterop
共有UI(DataTransferManager)にオーナーウィンドウ(HWND)を渡してShowShareUIForWindowを呼ぶための専用COMインターフェース。IInitializeWithWindowと同じ役割を担う別経路。
package identity必須のWinRT API
通知履歴やジャンプリストなど、package identityを持つパッケージ化されたアプリでのみ動作するWinRT API群。
package identity
MSIXなどのパッケージが持つ、Windowsが認識する一意の識別子。名前、バージョン、アーキテクチャ、ResourceId、発行元という5つの組で構成される。
RoInitialize
現在のスレッドを指定した並行性モデル(STA/MTA)でWinRT用に初期化するAPI。
既存WPF/WinFormsへのWinUI段階移行
既存のWPF/WinFormsアプリに、XAML IslandsなどでWinUI系のコントロールを少しずつ混ぜていく移行構想。

機械可読データ

このデータセットについて

作成
合同会社小村ソフト
ライセンス
CC BY 4.0 ── 出典(合同会社小村ソフト)とライセンスへのリンクを明示し、改変した場合はその旨を示すことを条件に、再配布・改変を含めて再利用できます
最終確認日
2026-08-29 ── 収録する関係のうち、最後に出典と照合した日

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。