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