連載
» 2013年05月29日 14時28分 公開

第1回 Windowsランタイム・コンポーネント概観連載:Windowsランタイム・コンポーネントによるコードの再利用(2/4 ページ)

[arton,著]

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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。