|
Windows用ソフトをCEに移植しよう! MFCアプリの移植方法1999年3月9日 |
↑[Home] へ ■はじめに
Windows用のMFCで作成したソフトを移植するにはどうしたらよいのだろうか。具体的な移植の手順を公開してみたいと思う。これは私がアイデアツリーやTCARD、SelfManagerなど自分のソフトをCEに移植した経験から考えだした手法である。以下、CE Toolkit for Visual C++(R) 5.0 を前提にする。
■AppWizardで新規作成
まずはAppWizardで新規にスケルトンを作成する。やはり、CE用ソフトはCE用ソフトとして完全に別個にした方がよさそうである。単純に全ファイルをコピーしてCE用に改造するよりもこちらの方がCE特有の問題に最初から対応しているので安心でもある。
ここで注意しなくてはいけないのはMDIがCEではサポートされないということ。MDIソフトはSDIに変更する必要がある。また、CE用ソフトのAppWizardの機能も非常に少ない。データファイルの拡張子の設定も出来ない。CEでは拡張子の関連づけはMFCが自動ではやってくれないのだ。これは自分で対処する必要がある。
■各クラスを移植
その後、各クラスの内容をWindows用のソースからCE用のソースにコピーしていく。私の場合、まずDocumentクラスから始める。まずはファイル関係の処理を正しく行えるようにして、その後Viewクラスを仕上げていく。この作業は、基本的には関数をコピーするだけであるが、その際、以下の点に注意が必要である。
ほとんどの場合、代替手段はすぐに見つかると思う。もちろん、クラスの自作は大変だが、一度作ってしまえば後はそれを再利用するだけなので、大変なのは最初だけである。慣れればかなり手早くソフトを移植できるようになる。
- UNICODE対策として文字列は全て_T()で囲み、charはTCHARにする
- Cの標準関数がサポートされていない場合、適当な関数に置き換える
- APIがサポートされていない場合、適当なAPIに置き換える
- クラスが無い場合、自作するなどして対応する
なお、メッセージハンドラはClassWizardを使って設定した方が面倒が無くてよい。もちろん、手動で行っても問題はない。
■ダイアログを移植
ダイアログの移植は面倒である。まずダイアログリソースをコピーし、これをClassWizardを使ってWindows用と同じクラス名を付け、同じ変数名をつける。それから各メッセージハンドラをClassWizardで追加していき、内容をコピーしていく。
なお、CE用のダイアログは画面サイズを考慮してWindows用より小さくしなくてはいけないケースが出てくる。PalmSize-PCも考慮に入れるとダイアログサイズはVisual-C++のリソースエディタで136*125が限界ではないだろうか。これに対応するにはダイアログのフォントを小さくする、などの配慮も必要になってくる。
また、CEではタイトルバーにOKボタンが付いているダイアログがよくある。これはダイアログのサイズも小さくできるので、非常に便利である。これに対応するには、ダイアログのプロパティの拡張スタイルで「キャプションバーOK」をチェックすればよい。これを使えば既存のOKボタンを削除することが出来る。ただし、OKボタンを削除してしまうとClassWizardにIDOKが出なくなり、OKボタンのコマンドハンドラ(OnOK関数)が設定できなくなるので、削除する前にコマンドハンドラを設定しておいた方がよい。
■ツールバー(コマンドボタン)の移植
Windows用のツールバーはWindowsCEではコマンドボタンとなっていて、少々使い勝手が違う。
まずリソースのところでイメージとIDを設定するのは同様だが、その後CMainFrameを手動で書き直す必要がある。書き直すのは、 g_tbSTDButton というTBBUTTON の配列でこの内容をリソースのイメージと整合性を取る必要がある。それからCMainFrameのOnCreateでInsertButtonsという関数を呼び出しているが、ここでNImagesとコメントされている4番目の引数にボタンの数を書く必要がある。
これをやらないとボタンの動作が正しくならないし、また絵もおかしく表示される場合もある。注意が必要だ。
■動作確認
さて、無事ビルドできたら、動作確認を行う。ここではエミュレーションではなく実機で動作確認を行う場合に注意する点を書いておく。なお、エミュレーションさえ使わなければNTではなくてもWindows95/98で開発が行える。その際は動作確認は実機での確認しか出来ない。
MFCをスタティックリンクしていない場合(共有DLLでMFCを使用の場合)には、当然MFCのDLLを実機のWindowsディレクトリに入れておかなくてはいけない。DevStudio\WCE\MFC\LIB\WCE200 にCE2用のDLLがプロセッサごとに分かれて入っている。デバッグ用がMFCCE20D.DLL、リリース用が MFCCE20.DLLだ。また、MFC42LOC.DLLを入れないとコモンダイアログなどのリソースが日本語表示にならないので注意しよう。
Visual-C++ではビルドすると自動的に実機へEXEファイルを転送してくれる。このときあまりに遅い転送速度だと非常にイライラするので転送速度を変えておこう(WindowsCE2.0とPCを115kで接続しよう!を参照)。 しかし、CE Serviceではその速度で接続できてもVisual-C+での転送では失敗する、ということがあるようだ。そのときには転送速度を少しずつ落として試してみよう。ちなみに私の場合、HP620LXとE55で38400bpsで成功している。
■最後に・・・
今回は移植の概要を書いてみたが、さらに実践的な移植方法について、今後は発表していきたいと思うので、開発者の方でさらに気がついたことがありましたら、是非メールもしくは掲示板にご意見等ください。今後もMFCでの移植についての詳細情報、新規開発についての情報を公開していきます。
■関連URL
■感想・コメントは、Windows CE FAN の掲示板 (BBS) へお願いします。
===更新履歴===
1999/3/8 作成
Reported by 古原伸介
![]()
(C)1999 Windows CE FAN