‘PocketPC’のエントリ

すっかり忘れていたのだが,LobbyのPocketPC版をWeather Typing 2.1に入れなければならない。でVisual Studio 2005でビルドしてみたのだが,.NET Compact Framework 2.0に対応させないとうまくビルドできない。てことで.NET Compact Framework 2.0を調べてみたら,前に作ったときに困ってたInvoke,Splitterがサポートされている模様。もう少し作り込んでみようか。

PocketPC2003 SEエミュレータでLobby for PPCを動かしてみた。最初に古いバージョンとかの警告が出る以外は動作に問題はなさそう。ちなみにVGAで動かすと,文字が大きいだけでちゃんとフルスクリーンで動作している。LandscapeやSquareにするとスクロールバーが出ているのがちょっと変だけど。

ロビーサーバは5/3の早朝,復活した模様。原因の詳細は聞いていないのでよく分からないのだが,電源が落ちていた,のかな。


PocketPC版ロビークライアントを公開。ほとんど自分で使うためのものだけど,もしかしたら誰か必要としているかも知れないので公開。

2005050301


そのうちちゃんとしたドキュメントは書くつもりだけど,以下開発メモ。

  • 動作環境はPocketPC2002またはPocketPC2003搭載機。といってもVGA機とかだとウィンドウがちっちゃいとか問題あると思う。
  • なお,PocketPC2002についてはVS.NETのエミュレータの動作確認のみで,実機で動かしたことはない。
  • 制限事項1。チャット部分はユーザが編集できる。これはTextBoxをReadOnlyにすると背景色が変わってしまうのと,背景色を変えられなかったためだが,将来バージョンの.NET Compact Frameworkでなんとかなることを期待してそのまま。
  • 制限事項2。発言があった場合必ず一番下までスクロールする。本当はスクロールバーの位置を見てスクロールするか判断するべきだが,やり方が見つかってない。
  • 制限事項3。メンバ一覧とチャット部分の仕切りは移動できない。これも将来の.NET Compact Frameworkに期待。
  • 制限事項4。状態の変更は未サポート。
  • 制限事項5。メンバ毎の発言色は未サポート。

.NET Compact Framework。いろいろと制限はあるものの少しずつロビークライアントを実装してみる。以下開発メモ。

とりあえずTips的なものはMSのFAQが詳しい。


Visual Studio.NET 2003にはPocket PC 2002エミュレータというのが付属していて,VirtualPCっぽい感じ(というか提供元Connectixってなってるし同じものなんだろうけど)で使いやすいのだが,以下の設定でつまづく。

  • ホールドどうやってやるんだろう,と悩んでいたのだが,ホールド開始までが長いだけだった。かなりの時間押しっぱなしにしないと認識されない。
  • 実際に使う機会は少ないと思うが,ホストキーがデフォルトで右Altになっている。家のノートには右Altなんてないのでどうしようかと思っていたらVisual Studioの[ツール]-[オプション]の「デバイスツール」で設定できた。

HttpWebRequestでWebサーバにアクセスすると「チャンクの長さは無効です。」というエラーが表示される。これは.NET Compact Framework最新版では直っているようなので.NET Framework 1.0 SP3をダウンロードし,ファイル共有経由でnetcf.core.ppc3.x86.cabをエミュレータに配置して実行。


4号(誰)情報によると,.NETでは他のスレッドにメッセージを投げるとうまくいかないということでInvokeを使うらしいわけだが,.NET Compact Frameworkでは引数を付けてInvokeを呼べないという制限がある。で,スレッド上でのメソッド パラメータの呼び出しに載っているControlInvokerを使った。

ロビーを荒らしながらPocketPC版ロビークライアント開発。LAN経由でネットにつなげられるようになっていないのでデバッグがめんどいながらも,サーバにつないでチャットするだけはできた。

2005041001

 

実際ここからがめんどいんだけど・・・。


ロビーでの要望。

  • ロビーは現状SJISでサーバへ送っているので表現できない文字がある。ちなみにローカルのリッチエディットには送信前の文字列を入れているのでローカルには表示される。
  • ロビークライアント背景色の指定。

なんとか時間を作って 15 パズル for PocketPC を作ってるのだが,だいぶできてきた。

2003041701

あとは 1 ドットごとに動く処理とか画像選択処理とかを付ければ完成。折角だから Windows 版も作って時間測定機能とかも付けるか。

で,開発してて思ったのだが,移植は結構楽かも。簡易 MFC とか STL とかあるし。リモートスクリーンキャプチャとかツール類も揃ってるし。思わず CF LAN カードを揃えてしまったほど。あとはエミュレータへのファイルコピーができればいいんだけど,うまくいかない。

というわけでウェザタイ本体はかなり大変だけど,これならウェザタイロビー移植くらいならできそう。…需要がないけど。

引っ越し準備のために家にいた,はずなのだが結局ずっと PocketPC 開発環境を整えていた。

まず STL と標準 C++ ライブラリがないという問題。全部最初から作るならなくても構わないが,今までのソースを使いたいのでネットをあさって STLPort を使わせてもらった。しかし,コンパイルして使おうと思っていたのだがいろいろ試してもダメだった。で,stream を使わないように設定すればコンパイルせずに動くのでそれでいくことに。

ここまでで string とか vector とか sort とかが動くようになったのでなかなか使いやすくなった。次に stream が使えない問題だが,必要な部分だけ(ifstream::open iofstream::open ifstream::read ofstream::write くらい)CFile を用いて実装。

次。標準の例外処理が使えない問題。ってかなり致命的な問題な気もするが,MFC のソースを見ていると CException TRY CATCH マクロを使っているようなのでこれなら使える,ってことで CException から派生させてマクロで対処することにした。

ついでに画像ファイルを読みたいので zlib libpng を探すと,WindowsCE パッチが作られていたのでそこからライブラリを構築。

ここまでで画像を PocketPC に表示させることは成功。とりあえず 15 パズルでも作ってみるか。練習には丁度いいし。