更新 : 2007 年 11 月
MFC ActiveX コントロールをオートメーション サーバーとして開発すると、プログラムによってコントロールを別のアプリケーションに埋め込み、そこからコントロールのメソッドを呼び出すことができます。別のアプリケーションに埋め込んだコントロールは、そのまま ActiveX コントロール コンテナでもホストできます。
コントロールをオートメーション サーバーとして作成するには
コントロールを作成します。
メソッドを追加します。
IsInvokeAllowed をオーバーライドします。詳細については、サポート技術情報の「HOWTO: Use an OLE Control as an Automation Server (Q146120)」を参照してください。
コントロールをビルドします。
プログラムによってオートメーション サーバーのメソッドにアクセスするには
MFC exe などのアプリケーションを作成します。
InitInstance 関数の先頭に次の行を追加します。
AfxOleInit();[クラス ビュー] でプロジェクト ノードを右クリックし、[Typelib クラス追加] をクリックしてタイプ ライブラリをインポートします。
ファイル名の拡張子が .h のファイルと .cpp のファイルがプロジェクトに追加されます。
ActiveX コントロールの 1 つ以上のメソッドを呼び出すクラスのヘッダー ファイルに、#include filename.h という行を追加します。filename には、タイプ ライブラリをインポートしたときに作成されたヘッダー ファイルの名前を指定します。
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 コントロールにメソッドを追加した場合は、タイプ ライブラリをインポートしたときに作成されたファイルを削除すると、アプリケーション内のコントロールの最新バージョンを使用できます。その後、もう一度タイプ ライブラリをインポートします。