|
WindowsCE開発の特徴とは? WindowsCEとWindows開発との違い1999年3月5日 |
↑[Home] へ ■はじめに
WindowsCEはWindowsファミリーの一員であり、WindowsCE用ソフトウェアもデスクトップ版Windowsと同じように開発が可能である。ただし、本家Windowsとの違いも多くあり、そこがプログラマを悩ませることになる。しかし、その違いさえ押さえておけば、本家Windowsと同じようにWin32APIを使い、MFCを使うことも可能である。ここでは、本家Windowsとの違いにスポットを当てたい(以下、基本的にはMFCによる開発の話)。
■大きな違いはUNICODE
プログラミングを始めて、いきなりつまずく点は文字コードだろう。通常、Windows用ソフトウェアはMBCSという文字セットで開発している。半角が1バイト、全角が2バイトのシフトJISコードを使った文字セットだ。しかし、WindowsCEは全ての文字コードが2バイトとなるUNICODEしかサポートしない。内部的には全てUNICODEで扱われることになる。これにより影響を受けるのが文字列定数。全てUNICODEであることを明示しないと、文法エラーになったり、実行時にまずいことになったりする。UNICODEであることを明示するには、_T()でくくるとよい。
CString a;
a = _T("あああ");
また、単純にアプリケーション側でファイルを保存するとユニコードで保存されるため、Win95/98などのUNICODEをサポートしないOSにファイルを移してエディタで見てみると文字化けして見れない、ということがよくある。その逆も同じで、デスクトップのテキストファイルをCEに移して単純に読み込んで表示しても正しく表示されない。そこで、読み込み時には MBCSをUNICODEに、書き込み時にはUNICODEをMBCSに変換してやる必要が生じる。そのためには、MultiByteToWideChar や WideCharToMultiByte といったAPIを使う必要がある。
また、文字列を扱うときおなじみのデータ型 char も TCHAR に直す必要がある。LPCSTRもLPCTSTRに同じく修正が必要が必要だ。
■C言語の標準関数のサポートも少ない
C言語の標準関数が少ないのも開発者にとっては困りものだ。たとえば、fopen や fgets などのファイル系関数は使えない。これらはWin32APIやMFCで代替できるので、用意されていないのだろう。この手の関数をたくさん使っている場合は、移植に要注意である。
また、C言語の標準関数である strcpy strlen などは使うことが出来ない。これらはUNICODEでは使えないのだ。UNICODE用の関数として、 wcscpy wcslen など、strの代わりにwcsのつく関数を使うことになる。atoi や atol なども wtoi wtol を使うことになる。
■Win32APIやMFCはサブセット
Win32APIはサブセットであり、おなじみのAPIでも削除されているものも数多い。これは、CEの仕様上削除されたものもあるが、出来るだけWindowsCEをコンパクトにするために、代わりのAPIがあるものは全て削除された結果でもある。 たとえば、多くのプログラマが使ってきたであろう、TextOutは存在しない。ExtTextOutで代替すべきである(DrawTextはなんとか存在している)。GDI関係はかなり整理されている。
一方、MFCもサブセットであり、全てのクラスがあるわけではない。削除されているものとしては、CEの仕様上存在しないコントロールやOLE関係、データベース関係、そしてなぜか無いクラスとしては、コモンダイアログの一部(CColorDialogやCFontDialogなど)、インターネット関係(CInternetConnectionなど)、CStdioFileなどがある。特に一部のコモンダイアログが無いのはかなり痛く、Font選択用ダイアログはよく使うため自作せざるを得ないだろう。
また、クラスによっては削除されている関数も数多い。これはAPIの都合上削除されたものもある。たとえば、CDCにはTextOutは存在しない。その他、CTimeにFormatが無い、など痛いところが無くなっていて開発者を泣かせる。しかし、無くなっている、ということはたいていの場合、代わりの方法があるので、それでなんとかするしか無いだろう。
■WindowsCE自体がサポートしないものにも注意
最後に開発環境というより、WindowsCE自体がサポートしないものをあげておこう。まず、MDIはサポートしない。ステータスバー、ツールバーも無い。当然ツールチップもない(ペンであることを忘れずに)。RichEditControlも無い。また、オーナードローのリストボックスはない。この2点は移植にかなり影響を与えるだろう。OLEもサポートしないことを忘れずに。
■でもほとんどあります
それでも、多くのAPIやクラスは存在している。そしてそれは開発者がCE用ソフトを作るにとっては十分にそろっているといえるだろう。移植には苦しむかもしれないが、削れるところはばっさり削って是非挑戦してほしい。
■関連URL
■感想・コメントは、Windows CE FAN の掲示板 (BBS) へお願いします。
===更新履歴===
1999/3/5 作成
Reported by 古原伸介
![]()
(C)1999 Windows CE FAN