第1回 Windowsランタイム・コンポーネント概観:連載:Windowsランタイム・コンポーネントによるコードの再利用(2/4 ページ)
Windowsランタイム・コンポーネントの概要と、Windowsストア・アプリの実行環境、Windowsストア・アプリで既存のコードを再利用する際の基本方針を解説。
Windowsストア・アプリの実行環境
2000年に.NET Frameworkが発表されたときは、それがWin32 API上の仮想的なOSという紹介のされ方をしていた。そのためか、Windowsランタイムも同じように、Windowsストア・アプリという枠組み用の仮想的なOSというとらえ方をしている開発者がいる(実は筆者もそうだった)。このようにとらえてしまうと、Windowsストア・アプリを開発するためのプログラミング言語、つまりVB、C#、C++、JavaScriptはいずれも、Windowsストア・アプリ用のマネージ・コードを生成すると考えてしまうことになる。
しかし実際にはそうではない。
ここでは最初に、各言語によって開発されるWindowsストア・アプリの特徴について説明する。これによって、Windowsランタイム・コンポーネントの役割が明らかになるからだ。
Windowsストア・アプリ用.NET
VBおよびC#で開発したアプリは、従来どおりMSIL(=中間言語)にコンパイルされる。ただし利用可能なのはWindowsストア・アプリ用.NET(System名前空間)とWindowsランタイム(Windows名前空間)に含まれるAPIのみである*2。これらのAPIでは、デスクトップ用.NET Frameworkアプリのように、P/Invokeを利用したWin32 APIの呼び出しなどはサポートされていない。
*2 VBおよびC#のリファレンスは次のリンク先を参照。「MSDN:Visual Basic および C# 言語リファレンス」
WWAHost
Windowsストア・アプリとして作成したJavaScriptコードは、「WWAHost.exe」というJavaScript実行エンジンとDOMなどの実行環境を提供するプログラムによって実行される*3。自身で用意したDOMなどを除いて、JavaScriptプログラムがWindowsストア・アプリ環境で利用できるのは、Windowsランタイム(Windows名前空間*4)およびJavaScript用Windowsライブラリ(WinJS名前空間)が提供するオブジェクトだ。この場合、ActiveXObjectオブジェクトを利用したCOMコンポーネントの作成はサポートされない。
*3 JavaScriptのリファレンスは次のリンク先を参照。「MSDN: JavaScript のリファレンス」
*4 JavaScriptの言語仕様としては、この「Windows」はオブジェクト名であるが、ここでは便宜的に「名前空間」と呼ぶ。
Windowsランタイム(ネイティブ)
C++の場合、Windowsランタイムに特化したプログラミング言語として新たにC++/CXが提供される*5。C++/CXは名前のとおりプレーンなC++に対する拡張言語であるが、よく似た名前のマネージ・コード・バイナリを作成するC++/CLIと異なり、ネイティブ・コードのバイナリを作成する。このため、x64、x86、ARMのそれぞれのCPU用にコンパイラが用意されている。C++/CXが利用可能なのは、Windowsランタイム(Windows名前空間)、プラットフォーム(Platform名前空間)および標準ライブラリ(std名前空間)とWin32 APIの一部である。この中でプラットフォームに属する型は特殊な位置を占める。プラットフォーム型のオブジェクトはWindowsランタイム・コンポーネントのABI用であり、参照カウンタによる自動的な削除の対象である。
*5 C++/CXのリファレンスは次のリンク先を参照。「MSDN: Visual C++ の言語リファレンス (C++/CX)」
Copyright© Digital Advantage Corp. All Rights Reserved.