ACDUAL サンプル : オートメーション アプリケーションへのデュアル インターフェイスの追加
更新 : 2007 年 11 月
ACDual では、MFC ベースのオートメーション (以前の OLE オートメーション) アプリケーションにデュアル インターフェイス サポートを追加する方法を示します。このソリューションは、次のプロジェクトで構成されます。
ACDualDriv。サーバー アプリケーションを制御するためにディスパッチ インターフェイスと vtable バインディングのどちらを使用するか選択できる、オートメーション クライアント AUTODRIV プロジェクトのバージョンが含まれます。
ACDual。デュアル インターフェイス サポートを備えたオートメーション サーバー AUTOCLIK プロジェクトの実際のバージョンが含まれます。
セキュリティに関するメモ : |
---|
このサンプル コードは概念を示す目的で提供されているものです。必ずしも最も安全なコーディング手法に従っているわけではないので、アプリケーションまたは Web サイトでは使用しないでください。Microsoft は、サンプル コードが意図しない目的で使用された場合に、付随的または間接的な損害について責任を負いません。 |
サンプルとそのインストール手順を取得するには
Visual Studio で、[ヘルプ] メニューの [サンプル] をクリックします。
詳細については、「サンプル ファイルの格納場所」を参照してください。
使用できるサンプルの最新バージョンと完全な一覧については、オンラインの Visual Studio 2008 Samples のページを参照してください。
サンプルは、コンピュータのハード ディスク上にもあります。既定では、サンプルおよび Readme ファイルは、\Program Files\Visual Studio 9.0\Samples\ の下のフォルダにコピーされます。Visual Studio Express Edition の場合、すべてのサンプルはオンライン上にあります。
サンプルのビルド
ACDual サンプルをビルドするには
acdual ディレクトリにあるソリューション ファイル acdual.sln を開きます。
[ビルド] メニューの [ビルド] をクリックします。
ACDual をスタンドアロン アプリケーションとして 1 回実行するとシステムに登録できます。
サンプルの実行
ACDual アプリケーションを登録した後、ACDualDriv アプリケーションを実行できます。IDE でソリューションをビルドすると、ACDualDriv を実行する前に、その登録が自動的に実行されます。ACDualDriv によって、ACDual アプリケーションが起動され、ドキュメント オブジェクトが作成されます。この後、ACDualDriv ユーザー インターフェイスを通じてオートメーションを使用することにより、このオブジェクトを操作できます。ACDualDriv には、ACDual のドキュメント オブジェクトとやり取りするために VTBL バインディングを使用するかどうかを選択できるチェック ボックスもあります。
ACDual サーバーでは、始点として AUTOCLIK が使用されます。元の AUTOCLIK サンプルと混同しないように新しいグローバル一意識別子 (GUID: Globally Unique Identifier) が生成され、ACDual サーバーが稼動しているかどうかを明確にするために、いくつかのリソース文字列が変更されています。ソースに対するその他の変更内容は、すべて次のようなコメント ブロックで示されます。
// DUAL_SUPPORT_START
... modified code goes here
// DUAL_SUPPORT_END
デュアル インターフェイス、オブジェクト記述言語 (ODL: Object Description Language) スクリプト、およびオートメーション エラー インターフェイスの詳細については、「テクニカル ノート 65: OLE オートメーション サーバー用デュアル インターフェイス サポート」を参照してください。
デュアル インターフェイス
デュアル インターフェイスを使用すると、IDispatch インターフェイスまたは VTBL インターフェイスを実装できます。公開されているすべてのオートメーション オブジェクトに対してデュアル インターフェイスを使用することをお勧めします。デュアル インターフェイスを実装するときの考慮事項については、「テクニカル ノート 65: OLE オートメーション サーバー用デュアル インターフェイス サポート」を参照してください。内容は以下のとおりです。
CCmdTarget ベースのクラスに対するデュアル インターフェイス サポートを実装する。
デュアル インターフェイス ポインタを渡す。
以下のようなタイプ セーフなバインディングを有効にする。
アプリケーションのライブラリ タイプの登録
タイプ ライブラリの変更を受け入れるためのプロジェクトのビルド設定の変更
タイプ ライブラリでの正確なオブジェクト クラス名の指定
例外とオートメーション エラー インターフェイスを扱う。
詳細については、ActiveX のトピックである「Overview of Automation」、「デュアル インターフェイス」、「Overview of Type Description Interfaces」、および dual 属性に関しては、「ODL Reference」のエントリを参照してください。
メモ : |
---|
このサンプルを含む一部のサンプルには、Visual C++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。 |
キーワード
ACDual サンプルでは、次のキーワードを使用します。
AfxMessageBox; AfxOleInit; AfxOleLockApp; AfxOleUnlockApp; CCmdTarget::EnableAutomation; CCmdTarget::FromIDispatch; CCmdTarget::GetIDispatch; CCmdTarget::OnFinalRelease; CControlBar::EnableDocking; CControlBar::GetBarStyle; CControlBar::SetBarStyle; CDialog::DoModal; CDocument::GetFirstViewPosition; CDocument::GetNextView; CDocument::OnNewDocument; CDocument::SetModifiedFlag; CDocument::UpdateAllViews; CFrameWnd::ActivateFrame; CFrameWnd::DockControlBar; CFrameWnd::EnableDocking; CFrameWnd::LoadFrame; CObject::AssertValid; CObject::Dump; CObject::IsKindOf; CObject::Serialize; COleTemplateServer::ConnectTemplate; COleTemplateServer::UpdateRegistry; CStatusBar::Create; CStatusBar::SetIndicators; CToolBar::Create; CView::DoPreparePrinting; CView::GetDocument; CView::OnBeginPrinting; CView::OnDraw; CView::OnEndPrinting; CView::OnPreparePrinting; CWinApp::AddDocTemplate; CWinApp::EnableShellOpen; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWinApp::RegisterShellFileTypes; CWnd::DoDataExchange; CWnd::GetParentFrame; CWnd::OnCreate; CWnd::OnLButtonDown; CWnd::PreCreateWindow; CWnd::ShowWindow; CWnd::UpdateWindow; DragAcceptFiles; ShowWindow; TextOut
ACDualDriv では、次のキーワードを使用します。
AfxGetApp; AfxMessageBox; AfxOleInit; CDC::DrawIcon; CDC::GetSafeHdc; CDialog::DoModal; CDialog::EndDialog; COleDispatchDriver::AttachDispatch; COleDispatchDriver::GetProperty; COleDispatchDriver::InvokeHelper; COleDispatchDriver::SetProperty; CRect::Height; CRect::Width; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWnd::DoDataExchange; CWnd::GetClientRect; CWnd::IsIconic; CWnd::OnClose; CWnd::OnCreate; CWnd::OnPaint; CWnd::OnQueryDragIcon; CWnd::SendMessage; CWnd::ShowWindow; CWnd::UpdateData; GetSystemMetrics; LoadIcon; ShowWindow