Iwao Dev

気付いたことをメモしています.

この画面は、簡易表示です

2014年1月16日

OCX x64

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


  にほんブログ村 IT技術ブログへ

  • Categories:


    top

    %d人のブロガーが「いいね」をつけました。