MFC ActiveX コントロール : オートメーション サーバーの作成

更新 : 2007 年 11 月

MFC ActiveX コントロールをオートメーション サーバーとして開発すると、プログラムによってコントロールを別のアプリケーションに埋め込み、そこからコントロールのメソッドを呼び出すことができます。別のアプリケーションに埋め込んだコントロールは、そのまま ActiveX コントロール コンテナでもホストできます。

コントロールをオートメーション サーバーとして作成するには

  1. コントロールを作成します。

  2. メソッドを追加します。

  3. IsInvokeAllowed をオーバーライドします。詳細については、サポート技術情報の「HOWTO: Use an OLE Control as an Automation Server (Q146120)」を参照してください。

  4. コントロールをビルドします。

プログラムによってオートメーション サーバーのメソッドにアクセスするには

  1. MFC exe などのアプリケーションを作成します。

  2. InitInstance 関数の先頭に次の行を追加します。

    AfxOleInit();
    
  3. [クラス ビュー] でプロジェクト ノードを右クリックし、[Typelib クラス追加] をクリックしてタイプ ライブラリをインポートします。

    ファイル名の拡張子が .h のファイルと .cpp のファイルがプロジェクトに追加されます。

  4. ActiveX コントロールの 1 つ以上のメソッドを呼び出すクラスのヘッダー ファイルに、#include filename.h という行を追加します。filename には、タイプ ライブラリをインポートしたときに作成されたヘッダー ファイルの名前を指定します。

  5. ActiveX コントロールのメソッドを呼び出す関数に、コントロールのラッパー クラスのオブジェクトを作成するコードを追加して、ActiveX オブジェクトを作成します。たとえば、次の MFC コードは、CCirc コントロールをインスタンス化し、Caption プロパティを取得します。その後、ダイアログ ボックスの [OK] ボタンがクリックされると、結果を表示します。

    void CCircDlg::OnOK()
    {
       UpdateData();   // Get the current data from the dialog box.
       CCirc2 circ;    // Create a wrapper class for the ActiveX object.
       COleException e;   // In case of errors
    
       // Create the ActiveX object. 
       // The name is the control's progid; look it up using OleView
       if (circ.CreateDispatch(_T("CIRC.CircCtrl.1"), &e)) 
       {
          // get the Caption property of your ActiveX object
          // get the result into m_strCaption
          m_strCaption = circ.GetCaption();
          UpdateData(FALSE);   // Display the string in the dialog box.
       }
       else   { // An error
          TCHAR buf[255];
          e.GetErrorMessage(buf, sizeof(buf) / sizeof(TCHAR));
          AfxMessageBox(buf);   // Display the error message.
       }
    }
    

アプリケーション内で使用した ActiveX コントロールにメソッドを追加した場合は、タイプ ライブラリをインポートしたときに作成されたファイルを削除すると、アプリケーション内のコントロールの最新バージョンを使用できます。その後、もう一度タイプ ライブラリをインポートします。

参照

概念

MFC ActiveX コントロール