次の方法で共有


DCOM サンプル : COM オブジェクトのリモート呼び出し

更新 : 2007 年 11 月

DCOM サンプルでは、複数のクライアントが各自のコンピュータから Windows サービスに実装されている COM オブジェクトを呼び出す方法を示します。このサンプルは、以下の 3 つの部分で構成されています。

  • DrawServ — COM オブジェクトを実装する Windows サービス

  • ATLDraw — DrawServ COM オブジェクトに接続するクライアント

  • DrawCtl — ATLDraw のコントロール バージョン

3ts2dxc8.alert_security(ja-jp,VS.90).gifセキュリティに関するメモ :

このサンプル コードは概念を示す目的で提供されているものです。必ずしも最も安全なコーディング手法に従っているわけではないので、アプリケーションまたは Web サイトでは使用しないでください。Microsoft は、サンプル コードが意図しない目的で使用された場合に、付随的または間接的な損害について責任を負いません。

サンプルとそのインストール手順を取得するには

  • Visual Studio で、[ヘルプ] メニューの [サンプル] をクリックします。

    詳細については、「サンプル ファイルの格納場所」を参照してください。

  • 使用できるサンプルの最新バージョンと完全な一覧については、オンラインの Visual Studio 2008 Samples のページを参照してください。

  • サンプルは、コンピュータのハード ディスク上にもあります。既定では、サンプルおよび Readme ファイルは、\Program Files\Visual Studio 9.0\Samples\ の下のフォルダにコピーされます。Visual Studio Express Edition の場合、すべてのサンプルはオンライン上にあります。

サンプルのビルドと実行

このサンプルを動作させるには、すべてのコンピュータで Windows 2000 以降を実行する必要があります。

サンプルをビルドして実行するには

  1. DCOM.sln ソリューション ファイルを開きます。

  2. [ビルド] メニューの [ソリューションのビルド] をクリックします。

  3. サンプルを実行する各コンピュータに、DrawServ.exe と ATLDraw.exe または DrawCtl.dll をコピーします。コマンド ライン引数 /RegServer または -RegServer (大文字小文字は区別されません) を指定して DrawServ を実行します。各コンピュータにサーバーが登録されます。たとえば、次のように指定します。

    C:\ATL> DrawServ /RegServer 
    

    このコマンドが動作するには、ATL.DLL が登録されている必要があります。各クライアントにサーバーをコピーして、各クライアントにサーバーの CLSID とサーバーのタイプ ライブラリを登録する必要があります。

  4. コントロール パネルの [管理ツール] の [サービス] を使用して、サーバーのサービスを開始します。

  5. 各クライアントの DCOMCNFG ユーティリティを使用 (コマンド ラインから実行) して、DrawServ クラスのプロパティを選択します。[場所] タブの [次のサーバー上でアプリケーションを実行する] をクリックします。サーバー オブジェクトを実行するコンピュータ名を入力します。

  6. ATLDraw を実行し、各クライアントの [Server] メニューの [Connect] をクリックします。クライアント ウィンドウで、マウスの左ボタンを押しながら、線をドラッグしてください。描画された線は、同じサーバーに接続されている各クライアントに表示されます。[View] メニューの [Color] をクリックして、各クライアントの色を変更することもできます。

パスに空白が含まれていると、DrawServ サンプルは正しく登録されません。この問題の解決方法の 1 つは、対応する .rgs ファイルを編集し、すべての %MODULE% を単一引用符で囲むことです。たとえば、次のコードを含む行を変更します。

InprocServer32 = s %MODULE%

このコードを次のように変更します。

InprocServer32 = s '%MODULE%'

キーワード

このサンプルでは、次のキーワードを使用します。

AfxMessageBox; ASSERT_VALID; ATLASSERT; AtlUnadvise; BEGIN_COM_MAP; BEGIN_CONNECTION_POINT_MAP; BEGIN_INTERFACE_MAP; BEGIN_MSG_MAP; BEGIN_OBJECT_MAP; CComCoClass; CComControl; CComModule::GetClassObject; CComModule::GetLockCount; CComModule::Init; CComModule::RegisterServer; CComModule::Term; CComModule::Unlock; CComModule::UnregisterServer; CComModule::UpdateRegistryFromResource; CComObjectRoot; CDocument::OnNewDocument; CFrameWnd::AssertValid; CFrameWnd::DockControlBar; CFrameWnd::Dump; CFrameWnd::EnableDocking; CFrameWnd::OnCreate; CFrameWnd::PreCreateWindow; CloseServiceHandle; CoCreateInstance; CoCreateInstanceEx; CoInitialize; CoInitializeSecurity; COM_INTERFACE_ENTRY; COM_INTERFACE_ENTRY_IMPL; COM_INTERFACE_ENTRY_IMPL_IID; COM_INTERFACE_ENTRY2; CONNECTION_POINT_ENTRY; ConnectSink; ControlService; CoUninitialize; CProxyIDrawServ; CreatePen; CreateService; CStatusBar::SetIndicators; CToolBar::EnableDocking; CToolBar::LoadToolBar; CView::DoPreparePrinting; CView::OnLButtonUp(nFlags, point);; CView::PreCreateWindow; CWinApp::AddDocTemplate; CWinApp::LoadStdProfileSettings; CWinApp::ParseCommandLine; CWinApp::ProcessShellCommand; CWindow::SetCapture; DECLARE_GET_CONTROLLING_UNKNOWN; DECLARE_REGISTRY_RESOURCEID; DeleteObject; DeregisterEventSource; DisableThreadLibraryCalls; Disconnect; DisconnectSink; END_COM_MAP; END_CONNECTION_POINT_MAP; END_INTERFACE_MAP; END_OBJECT_MAP; GetModuleFileName; IConnectionPointContainerImpl; IDataObjectImpl; IDispatchImpl; IMPLEMENT_DYNCREATE; Install; INTERFACE_PART; IObjectSafetyImpl; IOleControlImpl; IOleInPlaceActiveObjectImpl; IOleInPlaceObjectWindowlessImpl; IOleObjectImpl; IPersistStorageImpl; IPersistStreamInitImpl; IProvideClassInfo2Impl; IQuickActivateImpl; ISupportErrorInfo; IViewObjectExImpl; IViewObjectExImpl::Draw; LineTo; LoadString; LogEvent; MESSAGE_HANDLER; MessageBox; MoveToEx; OBJECT_ENTRY; OffsetRect; OpenSCManager; OpenService; PostThreadMessage; PtInRect; QueryInterface; RegisterEventSource; ReleaseDC; ReportEvent; SelectObject; SetCapture; SetServiceStatus; SetWindowOrgEx; StartServiceCtrlDispatcher; Uninstall

参照

その他の技術情報

ATL サンプル