"ソフコン2002 3rd Edition featuring l'agenda"
第5回 既存ソフトとの切り分け

l'agenda用ソフトとそれ以外のCEマシン用のソースコードを切り分けるには?

【国内記事】 2001年12月14日更新


既存ソフトとの切り分け

 さて,l'agenda対応ソフトを作ろうとしているわけだが,l'agendaだけにしか対応しないソフトは少ないだろう。既存ソフトをl'agendaに移植するケースも多いのではないかと思う。そのため,l'agendaで動作するときと,それ以外のCEマシン用のソースコードを切り分ける必要が出てくる。

 この処理の切り分けはl'agendaに限らず今までも必要になってきた。例えば,“PocketPC専用の処理を行う”などである。その場合には以下のように行ってきた。

#if defined(_WIN32_WCE_PSPC) && (_WIN32_WCE >= 212)
//PocketPC用のソース
#else
//非PocketPC用のソース
#endif

 このように#ifなどプリプロセッサを使って,処理を切り分けてきた。ではBE500(l'agenda)の場合,どのようなプリプロセッサを使えばいいのであろうか?

 実を言うと,BE500を特定できるようなプリプロセッサは用意されていないのである。これは困った。何か対処方法はないだろうか?

構成で切り分ける

 ここで私が行っている方法を紹介したい。それはBE500専用の構成を作成し,その構成でプリプロセッサを自分で指定する,というものである。その構成ではBE500用のSDKでしかコンパイルしないことにする。それ以外の構成ではBE500用以外のSDKでコンパイルすることにする。

 まず,[ビルド]-[構成]でBE500用の構成を追加する。構成名はとりあえず,BE500Rel とでもしよう。CPUはMIPS,設定のコピーではMIPSのものをコピーする。


 新しい構成ができあがったら,早速,アクティブな構成に新しい構成を指定し,設定を変更する。[プロジェクト]-[設定]の「C/C++」タブで,「プリプロセッサの定義」というところの最後にBE500特有を表すプリプロセッサを自分で(適当に)決めて指定する。例えば,LAGENDA_BE500 などだ。


 そして,以下のようにすればよい。

#ifdef LAGENDA_BE500
//l'agenda用のソース
#else
//非l'agenda用のソース
#endif

 あとは,l'agenda用の構成では,l'agenda用のSDKでのみビルドするように注意するだけである。

 このようにすることで,l'agendaとそのほかのCE用のソースコードを切り分けることが可能となる。

 なお,もしMFCを使用する場合,このl'agenda用構成では,「共有DLLでMFCを使用する」にしておく。そうしないとリンクエラーが出る場合がある。MFC用のDLLはl'agendaに最初から内蔵されているので,スタティックリンクする必要性はない。

今後のサンプルコードについて

 今後の連載でl'agenda特有の機能を次々と使っていくことになる。そのサンプルコードでは簡潔にするためl'agendaでしか動かないような記述をしていくが,実際には(ほかのCEマシンでの動作も考慮に入れる場合には)今回のような方法で既存ソフトとソースを切り分けていくことになる。

関連記事
▼ Windows CEソフトウェアコンテスト2002 3rd Edition featuring l'agenda開催
▼ 第1回 開発環境を入手しよう!
▼ 第2回 ラジェンダの特徴
▼ 第3回 開発環境のインストール
▼ 第4回 作ったソフトを動かすには?

関連リンク
▼ コンテストエントリーページ
▼ 開発者向けラジェンダ開発掲示板
▼ eMbedded Visual Tools 3.0連載記事 - WindowsCE FAN
▼ マイクロソフト Windows Embedded

[古原伸介,ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.



モバイルショップ

最新CPU搭載パソコンはドスパラで!!
第3世代インテルCoreプロセッサー搭載PC ドスパラはスピード出荷でお届けします!!

最新スペック搭載ゲームパソコン
高性能でゲームが快適なのは
ドスパラゲームパソコンガレリア!