ACDUAL サンプル:オートメーション アプリケーションにデュアル インターフェイスを追加します。
ACDual では、MFC ベースのオートメーション (以前の OLE オートメーション) アプリケーションにデュアル インターフェイス サポートを追加する方法を示します。 このソリューションは、次のプロジェクトで構成されます。
ACDualDriv。サーバー アプリケーションを制御するためにディスパッチ インターフェイスと vtable バインディングのどちらを使用するか選択できる、オートメーション クライアント AUTODRIV プロジェクトのバージョンが含まれます。
ACDual。デュアル インターフェイス サポートを備えたオートメーション サーバー AUTOCLIK プロジェクトの実際のバージョンが含まれます。
セキュリティに関するメモ |
---|
このサンプル コードは概念を示すためのものであり、その概念に関連するコードのみを示しています。特定の環境について必ずしもセキュリティ要件を満たしていませんので、そのまま使用しないでください。セキュリティおよびエラー処理コードを追加して、プロジェクトをより安全かつ堅牢にすることをお勧めします。これらのサンプル コードは、現状有姿のままで提供されるものであり、一切保証されていません。 |
サンプルとそのインストール手順を取得するには
Visual Studio のサンプルにアクセスするには
[ヘルプ] メニューの [サンプル] をクリックします。
既定では、これらのサンプルは drive:\Program Files\Microsoft Visual Studio 10.0\Samples\ にインストールされています。
サンプルのビルド
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 のトピックである「オートメーションの概要」、「デュアル インターフェイス」、「オートメーションの種類の説明のインターフェイス」、および dual 属性に関しては、「ODL Reference」のエントリを参照してください。
注意
このサンプルを含む一部のサンプルには、Visual C++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。
Keywords
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