画餅展覧会

2009 年 1 月 14 日

eVCのexceptionはどこにあるか?

カテゴリー: C++, Programming, Windows Mobile — jk78 @ 8:49 PM

Embedded Visual C++ 4.0 + Pocket PC 2003 SDKでC++ exceptionを使うとLNK2001/LNK2019/LNK1120エラーが出る話は何度かしたが、ふと、Embedded Visual C++ 4.0付属のSTANDARDSDKではこのエラーがでないことに気が付いた。STANDARDSDKなど使わないから気がつかなかったよ。

で、問題のexceptionやらtype_infoやらが、どこに入っているのか調べてみました。なんとcoredll。

こんなエラーが出るわけですが、

main.obj : error LNK2001: unresolved external symbol "public: __thiscall std::exception::exception(class exception::exception const &)" (??0exception@std@@QAE@ABV01@@Z)
main.obj : error LNK2001: unresolved external symbol "const  type_info::`vftable'" (??_7type_info@@6B@)
main.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall std::exception::~exception(void)" (??1exception@std@@UAE@XZ) referenced in function "public: virtual __thiscall std::logic_error::~logic_error(void)" (??1logic_error@std@@UAE@XZ)
main.obj : error LNK2019: unresolved external symbol "public: __thiscall std::exception::exception(char const *)" (??0exception@std@@QAE@PBD@Z) referenced in function "public: __thiscall std::logic_error::logic_error(class logic_error::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0logic_error@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z)

STANDARDSDKのcoredllをdumpbin出力:

Dump of file coredll.lib
1572    ??0exception@std@@QAE@ABV01@@Z (public: __thiscall std::exception::exception(class exception::exception const &))
1570    ??0exception@std@@QAE@XZ (public: __thiscall std::exception::exception(void))
1574    ??1exception@std@@UAE@XZ (public: virtual __thiscall std::exception::~exception(void))
1580    ??_7type_info@@6B@ (const  type_info::`vftable')

なんでPocket PC 2003 SDKから、こいつらを外しちゃったんでしょうかねえ。

ChooseIM: MS-IME + JISかな入力パネルでは使えません

カテゴリー: JISかな入力パネル, Programming, W-ZERO3, Windows Mobile — jk78 @ 8:14 PM

慌てて作ったものだからろくにテストしてなかった。

MS-IMEを使っている場合、ChooseIMでMicrosoft製以外の入力パネル(たとえばJISかな入力パネル)JISかな入力パネルを選択すると、入力に不具合が生じる。かな等を入力しても、警告音が鳴って文字が入ってくれない。Pocket PC 2003 SE Emulatorでも再現する。原因はまったく不明。

W-ZERO3[es]とAdvanced/W-ZERO3[es]では、「手書き入力」パネルに切り替えて、一文字(「あ」とか)入力すると、そのあとは入力できるようになるんだけど、これじゃChooseIMの意味が無い。などと調べていたら「ひらがな/かたかな」&「ローマ字/かな」と「手書き検索」&「手書き入力」はずいぶん動作が違うことに気が付いた。これはまた別項。

というわけで、MS-IMEをご利用の場合、ChooseIMでJISかな入力パネルはご使用いただけません。やれやれ。

2009 年 1 月 12 日

Rich Text Format + Hyper Link 続き

カテゴリー: C++, Programming, W-ZERO3, Windows Mobile — jk78 @ 6:15 PM

Windows Mobile上でRich Edit/RichInkを少しいじってみたので、以下、発見など。

  • Pocket PC 2003 SEのエミュレータにはPocket Wordが入っていますが、riched20.dllは入っていません。このバージョンのPocket WordはInkX/RichInkを使って動作します。
  • W-ZERO3[es]とAdvanced/W-ZERO3[es]のWord MobileはRich Editを使用します。ただし、このriched20.dllは、”RICHEDIT50W”、つまりMSFTEDIT_CLASS、つまりRich Edit Control 4.1しかサポートしていないようです。
  • Embedded Visual C++ 4.0 + Pocket PC 2003 SDKの環境に、Platform SDK Feb 2003のrichedit.hをぶち込むと、そのままエラーなしでコンパイルできます。ただし、richedit.hとrichink.hはエラーが出て共存できませんので、両方使う場合は、ファイルを分ける、などの工夫が必要です。
  • Rich Editは、WS_BORDERを指定して作成すると、3Dエッジを付けてくれます。かっこ悪~い。WS_BORDERを指定しないと、ボーダーが無くて、ダイアログ背景との境がわかりません。
  • W-ZERO3[es](WS007SH)に搭載されているriched20.dllは、Rich Edit Controlの作成から間もない期間にEM_SETSEL/EM_EXSETSELを送ると、ビジー・ホイール(ウェイト・カーソル)が出っ放しになって消えなくなることがある、という問題を抱えているようです。つまり、実質EM_SETCHARFORMAT+SCF_SELECTIONが使えません。(あるいは無理やり消しちゃえばOK?)
  • RichInkのRich Text Formatサポートは再現品質が低い。行間は空けてくれないし、左右のダブルクオート「“(U+201C)」と「”(U+201D)」を、どちらもASCII用の左右の区別の無いダブルクオート「”(U+0022)」で表示したり、タブ位置が再現できない、といった具合です。
  • WTL 7.5/8.0のCRichInkCtrlTクラスには選択域を設定するSetSel関数がありません。誰も使ってないんじゃないの?
  • RichInkのメッセージEM_SETZOOMPERCENTは、ドキュメントにはwParamにズーム百分率を指定すると書いてありますが、richink.hをみるとlParamで指定すると書いてあります。実際にはlParamに指定しないと動作しないようです。WTL 7.5/8.0のCRichInkCtrlT::SetZoomPercent()関数はwParamにズームを渡しているので動作しません。使ってもlParamは常に0なので最低倍率らしい75%になっちゃいます。
« 新しい投稿古い投稿 »

Powered by WordPress