MFC を利用した x86 の ocx の 64 ビット化.
しばらくやってないので,Win XP 32 ビット環境の VC 6 で,スケルトンの作成から.
ActiveX Controls Inside Out を見ながら,スケルトンを作成.
そのままビルドして,ActiveX コントロール テスト コンテナ で,挿入してテスト.
OnDraw のEllipse を DrawText に書換え.
void C????Ctrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) { // pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH))); // pdc->Ellipse(rcBounds); v_tstring buildMacros = ::Debug_GetMacroCC_v() ; CString macroStr = ::String_Join(buildMacros,_T("\r\n")).c_str() ; CRect rect = rcBounds ; pdc->DrawText(macroStr,rect,0) ; }
Debug_GetMacroCC_v は次の様なコード.
inline std::vector Debug_GetMacroCC_v (void) { std::vector typeAry ; #ifdef _WIN64 typeAry.push_back(_T("_WIN64 ")) ; #elif _WIN32 typeAry.push_back(_T("_WIN32 ")) ; #endif // ... #ifdef _MFC_VER typeAry.push_back(_T("_MFC_VER ")+::utot(_MFC_VER,16)+_T(" ")) ; #endif #ifdef _UNICODE typeAry.push_back(_T("_UNICODE ")) ; #endif // ... return typeAry ; }
今度は,Win 7 x64 環境で,VC 9 を利用しての確認.
「ActiveX コントロール テスト コンテナ」は,以前のバージョンとは異なり標準では存在しない.
検索するとサンプルにあるとのこと.
Win 7 環境には C:\…\VC2010Samples\C++\MFC\ole\TstCon があったので VC 10 でビルド.
VC 9 でスケルトンから作成して,OnDraw を同様に書換え.
また,構成マネージャを使用して x64 を追加.
それぞれの Release 版でビルド.
コントロールの登録は,管理者として起動した「コマンドプロンプト」で行っている.
それぞれの ocx のフォルダに移動し,regsvr32 ~.ocx として登録.
この時,ocx により?自動的に regsvr32 の 64 / 32 ビットそれぞれで登録されているみたい.
Excel 2010 で試すには,コントロールの挿入のために開発タブを有効にする必要がある.