Windowsランタイム
.NETFrameworkと共通言語ランタイム(CLR)は、サブプラットフォームとしてWinRTに統合されている。また、メタデータ形式やライブラリの設計など、WinRTプラットフォームの設計や実装の随所にその影響がみられる。.NETにおけるWinRTはマネージドオブジェクトとして実装されており、Win32APIのようにユーザーがハンドルなどを管理する必要はない。
WinRTは、主にC#およびVB.NETで記述されたXAMLベースの.NET Metroスタイルのアプリケーションをサポートする。正式なサポートとはされていないが、当然他の.NET言語から使用することもできる。
C++は、WinRT自体の開発言語であり、当然最も自然な形で利用することができる。C++からWinRTを使用する方法には、2つの選択肢があり、一つはWRL(ATLスタイルのテンプレートライブラリ)であり、もう一つはC++/CLIに似たC++/CX (コンポーネント拡張機能を備えたC ++)である。
違いとしては設計上WRLには例外が存在せず、実行結果の如何に関わらずCOMと同様のHRESULTベースの戻り値が返る。その一方で、C++/ CXは、WinRTへの呼び出しに対してエラーチェックを実行し、必要に応じて例外をスローするラッパーとなっている。
また、C++/CXでは、プラットフォームとその型システムとの統合を可能にする多くの拡張機能が実装されている。構文はC++/ CLIの構文に似ているが、ランタイムと統合するネイティブコードとメタデータを生成する。例えば、WinRTオブジェクトはref newでインスタンス化できるが、これはC++/CLIのgcnewに相当する。ハンドル宣言子(^)の用法は変わらないが、呼び出し元と呼び出し先の両方がC++で記述されており、同じプロセスに存在する場合、ハット参照は単にvtableへのvptrポインタを返す。
WinRTはネイティブプラットフォームであり、任意のネイティブC++コードをサポートする。C ++開発者は、ランタイムとインターフェイスするコードを作成するときに言語拡張機能を使用するだけで、既存のネイティブC /C++ライブラリを再利用することができる。
また、C++/CLIと比較して、純粋C++型(class/struct)とWinRT型(ref class/ref struct/value class/value struct)が混在する場合において課される制約がほとんどない。ただし、C++/CXは常用するべきものではなく、純粋なC++言語で書かれたコードをWinRTアプリケーションで再利用するためにラップする場合など、境界面においてのみ使用することが推奨されている。例えばC++/CXによるコンポーネント拡張はABI境界でのみ使用されることが勧められている。通常の(COM準拠の規約つきの)C++も、新しいテンプレートライブラリであるWindows Runtime C++ Template Library (WRL) で補助することでWinRTコンポーネントをプログラミングする際に利用可能である。目的としては、WRLはCOM用にATLが提供しているものに似ているが、いくつかの機能が省略されている。なお、のちに標準C++17をベースとした言語プロジェクションとしてC++/WinRTが開発され、C++/CXおよびWRLの代替として推奨されるようになった。
例えば従来のデスクトップアプリケーションの場合、C#コードからC++コードを再利用するときや、あるいはC++コードからC#コードを再利用するときは、いずれもP/Invoke、COM相互運用、もしくはマネージ言語であるC++/CLIによるラッパーを介する必要があったが、WinRTの場合はネイティブ拡張であるC++/CXまたはC++/WinRTを介することで相互運用可能なコンポーネントを作成・利用できるため、明示的にP/Invokeやマネージ言語を介する必要がなくなる。