« Windows8の使い方(その2) | トップページ | Windows8の使い方(その3) »

WinRTとは?

Windows8で新しく導入されたWinRTとは一体なんだろう?という疑問に対してあまりスッキリとした情報が見つからなかったので、いろいろ調べた情報をまとめてみる。

WinRTは簡単に言うとAPIだ。まずはそういうことにしよう。それと、ネイティブコードだ、といろんなドキュメントに書かれている。COMだとも書かれている。COM(Component Object Model)については.NET以前からある技術なので説明は省略シマス。

今までのネイティブAPIといえばWin32ですよね。Win32は、あれですね、DLLの関数を直接呼び出すやつで、C言語の関数呼び出しですね。実体は\Windows\system32にあるDLL(advapi32.dllなど)でしたね。COMって、あれですね、実体は.dllや.ocxといった拡張子のファイルで、どこのフォルダにあっても良くて、インストールするときにレジストリにフィル名が登録される、と。呼び出すときにOSがレジストリを見て、読み込むファイルを決めたりその他のこと(どのスレッドで実行するとか)も決めてくれるものでした。COM自体はクラスのインスタンスになっており、Win32とは違い、オブジェクト指向言語にマッチしていました。

じゃぁWinRTって何なの?ってことですけど、実体は、\Windows\system32にあるdllファイルです。ファイル名はWindows.~.dllです。Windows.UI.dllとか。でも、これを直接呼び出すんじゃないみたいなんですよ。これを直接呼び出すんならそれはもうネイティブプログラミングです。

今までのCOMとWinRTの違うトコロは、これが.NETやJavaScriptからスルッと呼び出せるということらしいです。そのために、ネイティブ(C++)、.NET(C#、VB、他)、JavaScriptといった異言語が共通で解釈できる共通ヘッダファイル的なものができました。それが.winmdファイルです。winmd(Windows meta data)は、あれです、中のファイルフォーマットは.NETアセンブリと同じらしいんです。それで、.winmdファイルには、WinRTのクラスについての、クラス名やメソッド名、パラメータの型なんかのメタデータが入っている(そしてコードそのものは入っていない)わけです。.winmdファイルは\Windows\WinMetadataフォルダに入っています。

たとえばC#プロジェクトで.winmdファイルを参照すると、.NET Framework 4.5は.winmdファイルを解釈し、呼び出し先クラス/メソッドがあたかも.NETのクラス/メソッドかのように扱ってくれる(Visual Studioでインテリセンスが効くなどもその効果)ということです。実際にWinRTのメソッドを呼び出す際には、.winmdファイルの中にはコードはないわけなので、.NET Framework 4.5が実体ファイルを探しに行きます。WinRTのdllは、名前空間をファイル名につけることになっているので、どうも、呼び出し先クラスの名前空間をもとに、実体のdllファイルを探すようです。そうして、C#のプログラムがWinRTのメソッドをあたかも.NETメソッドのように呼び出せるってことらしいです。

JavaScriptからWinRT呼び出すときも、そうですね。JavaScriptは.NET Frameworkではなく、ChakraというIEのJavaScriptエンジンで動きます。Chakraが.winmdファイルを解釈したり、実体dllファイルを探して読み込んで、実体オブジェクトを取得するところをやってくれるようです。そーしてJavaScriptのソースコードからWinRTのメソッドがサラサラっと呼び出せるようですね。

そしてネイティブのC++からはそのまま直接WinRTを呼び出せばいいと。

これで、なんとなくWinRTがなんなのかわかってきました。たぶん。APIというより、ABI(Application Binary Interface)の仕組みという感じですよね。

|

« Windows8の使い方(その2) | トップページ | Windows8の使い方(その3) »

Windows8」カテゴリの記事

コメント

Thank you!!
I finally found a good explanation!

投稿: znatz | 2012年12月 2日 (日) 12時12分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/543635/55493518

この記事へのトラックバック一覧です: WinRTとは?:

« Windows8の使い方(その2) | トップページ | Windows8の使い方(その3) »