(1/3)mrubyというオープンソースの組み込み用プログラミング言語コアを組み込んだWindowsランタイム・コンポーネントをC++/CXを使って実際に作ってみよう。前回は、既存のC/C++ライブラリをWindowsランタイム・コンポーネント化する際に取れる戦略と、それらの特徴、メリット/デメリットなどについて検討した。連載第2回ではmrubyをコンパイルしたが、今回は、そのmrubyを組み込んだWindowsランタイム・コンポーネントをC++/CXを使って実際に作ってみよう。ここでは、前回に説明したmrubyを組み込んだファサード・パターンのコンポーネントとする。完全なソース・ファイルは、https://github.com/arton/MrbFacadeにある*1。プロジェクト・ファイルに設定してあるmrubyのincludeディレクトリおよびlibディレクトリはダミーなので環境に合わせて修正する必要がある(これらの設定には、ソリューション・エクスプローラでプロジェクト名を右クリックして[プロパティ]を選択し、[C/C++]−[全般]もしくは[リンカー]−[全般]からアクセスできる。コンポーネント]を選択する(以下の画面を参照)。ここでは、mrubyのファサード(facade)とするので、プロジェクト名に「MrbFacade」と入力している。Windowsランタイム・コンポーネント・プロジェクトの新規作成プロジェクトを作成すると、ソリューション・エクスプローラには、以下のテンプレートが用意された状態となる。作成直後のWindowsランタイム・コンポーネント・プロジェクトプロジェクトを構成するファイルこのプロジェクトには以下のような.cpp/.hファイルが含まれている。Class1のコンストラクタのプレースホルダ。プロジェクト名の名前空間とPlatform名前空間の“using”は指定済み。プロジェクト名を名前空間として設定済み。プリコンパイル・ヘッダ用ソース・ファイル。プリコンパイル・ヘッダ用ヘッダ・ファイル。プリコンパイルしたいヘッダ・ファイルをincludeするまた、外部依存関係として、次の2つの.winmdファイルがあらかじめ組み込まれている。Windows名前空間(Windowsランタイム)このように、生成されるテンプレート・ファイルについては、外部依存関係の既定の設定を除けば一見するとWindowsランタイム・コンポーネントだからといって特に変わった点はない。Windowsランタイム・コンポーネント・プロジェクトのコンパイル・オプションWindowsランタイム・コンポーネント・プロジェクトの重要な設定は、コンパイル・オプションにある(以下の画面を参照)。サポート]が空欄(=利用しない)となっている代わりに、[Windowsランタイム拡張機能の使用]が[はい(/ZW)]となっていることが分かる。/ZWオプションによってWindowsランタイム言語拡張機能が有効となり(つまり、C++/CXを指定したことになり)、Windowsストア・アプリで利用できないランタイム関数の呼び出しはコンパイル時に検出されてエラーとなる。/ZWを設定すると、CLRは利用できなくなる。(C++/CX)」で解説されている。チェック)」を参照)によってランタイムエラー・チェックが有効になるが、このオプションを設定して生成したプログラムはWindowsストア・アプリの審査を通らないことには注意してほしい。Windowsストア・アプリをリリースする場合は、必ずReleaseビルドが必要である。C++のプロジェクトと同様に考えてよい。従って、mrubyをライブラリとして利用する場合は、標準的な方法、つまりmruby関連のヘッダ・ファイルを取り込むためのインクルード・ディレクトリを設定し、mrubyのライブラリ・ファイルを入力ライブラリとして設定する。以下で行う設定は、Debug、Releaseのいずれのビルドでも必要となるため、設定漏れを避けるために、あらかじめプロパティ・ページの[構成]を[すべての構成]にしておくことが望ましい。以下で参照するmrubyディレクトリは、第2回でmrubyをコンパイルしたときにソース・ファイルを展開したディレクトリである。読者が自分でmrubyをコンパイルしているときには「mruby\include」ディレクトリなどは対応するディレクトリに適宜読み替えてほしい。ソリューション・エクスプローラもしくは[プロジェクト]メニューからプロジェクトの[プロパティ]を選択して、そのプロパティ・ページで[リンカー]−[入力]の[追加の依存ファイル]に、libmruby.libファイルを追加するまた、mrubyのヘッダ・ファイルで構造体のレイアウトに影響するため、「DISABLE_STDIO」をプロジェクトのプロパティ・ページから[C/C++]—[プリプロセッサ]の[プリプロセッサの定義]に追加する。プロジェクトの構成ができたら、次にMrbFacadeで実装するAPIについて検討してみよう。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。