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 で試すには,コントロールの挿入のために開発タブを有効にする必要がある.

