Windows CE + Internet Explorer + ActiveX

こういう質問があったので。
Internet Explorer 6.0 for Windows CE で ActiveX コントロールを使いたい - MSDN フォーラム
MSDNコミュニティには参加してないので回答はしませんw
それにしてもひどい回答状況だな...つーかいつものモデレータは珍しく登場してないようだがどうしたんだろう?


Windows CEでのActiveXは特殊で、というか面倒くさい。(Developing Secure ActiveX Controls
Microsoftは一応動作はするようにしているが、コンパイラチーム(開発環境)にはやる気があるように見受けられない。
どうしてかって、、、
eMbedded Visual C++ 4.0の時も、Visual Studio 2005でも、ウィザードが吐き出すスケルトActiveXはバグバグなので。本当にテストしてるんかよ?と思ってしまう。。。


eMbedded Visual C++ 4.0の時はウィザードはWindows CEでサポートされないスレッディングモデル用のスケルトンコードを吐き出してくれる。(eMbedded Visual C++ 4.0のREADME『4.5 アパートメントスレッドモデルがIDEによって誤って設定される』を参照)


Visual Studio 2005では、IObjectSafetyが実装されない。(参考:Microsoft® Visual Studio® 2005 Beta 2 の既知の問題
デフォルトではウィザードが生成するコードは

#if defined(_WIN32_WCE) && (_WIN32_WCE < 0x500) // pIE on Windows Mobile platforms under 5.0 require IObjectSafety for the control to be loaded
public IObjectSafetyImpl,
#endif

となっており、ご丁寧なことにWindows CE 5.0以降だとIObjectSafetyの実装が無効にされてしまう。結果的にビルドしたものはIObjectSafetyにアクセスできないため、ブラウザからのロードが失敗する。
Windows CE 5.0以降で動かすためには#if と #endifをばっさり外してしまう必要がある。
ちなみにもう一箇所もあるので同様に。

#if defined(_WIN32_WCE) && (_WIN32_WCE < 0x500)
COM_INTERFACE_ENTRY_IID(IID_IObjectSafety, IObjectSafety)
#endif