DCOM 示例:演示如何远程调用 COM 对象
2009-05-07 23:18
495 查看
DCOM 示例:演示如何远程调用 COM 对象
更新:2007 年 11 月
DCOM 示例说明如何从运行于不同计算机上的多个客户端调用在 Windows 服务中实现的 COM 对象。它由三部分组成:
DrawServ — 实现 COM 对象的 Windows 服务。
ATLDraw — 连接到 DrawServ COM 对象的客户端。
DrawCtl — ATLDraw 的管理版本。
获取示例和安装示例的说明:
在 Visual Studio 的“帮助”菜单上,单击“示例”。
有关更多信息,请参见定位示例文件。
示例的最新版本和完整列表可以从 Visual Studio 2008 Samples page(Visual Studio 2008 示例页面)联机获取。
还可以在计算机的硬盘上查找示例。默认情况下,示例和自述文件将复制到 /Program Files/Visual Studio 9.0/Samples/ 下的文件夹中。对于 Visual Studio 速成版,所有示例都位于联机位置。
生成并运行示例
所有计算机必须运行 Windows 2000 或更高版本才能运行此示例。
在“生成”菜单中,单击“生成解决方案”。
将 DrawServ.exe 和 ATLDraw.exe 或 DrawCtl.dll 复制到要在其上运行此示例的每台计算机。通过运行带命令行参数 /RegServer 或 -RegServer(这不区分大小写)的 DrawServ,在每台计算机上注册服务器。例如:
复制代码
(必须注册 ATL.DLL 才能正常工作。) 必须将服务器复制到每个客户端以便在每个客户端上注册服务器的 CLSID 和服务器类型库。
通过使用“控制面板”中的“服务”图标,启动服务器上的服务。
在每个客户端,使用 DCOMCNFG 实用工具(从命令行运行它)选择 DrawServ 类的“属性”。从“位置”选项卡中选择“在下列计算机上运行应用程序”。输入要在其上运行服务器对象的计算机的名称。
运行 ATLDraw 并从每个客户端的菜单中选择“服务器连接”。通过按住鼠标左键并沿直线拖动,在客户端窗口中绘制线条。绘制的线条应显示在连接到同一服务器的每个客户端上。也可以使用“视图”中的“颜色”菜单选项来更改每个客户端的颜色。
如果 DrawServ 示例的路径包含空格,它将不能正确注册。解决此问题的一个方法是编辑相应的 .rgs 文件,并在 %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
更新:2007 年 11 月
DCOM 示例说明如何从运行于不同计算机上的多个客户端调用在 Windows 服务中实现的 COM 对象。它由三部分组成:
DrawServ — 实现 COM 对象的 Windows 服务。
ATLDraw — 连接到 DrawServ COM 对象的客户端。
DrawCtl — ATLDraw 的管理版本。
安全说明: |
---|
提供该示例代码是为了阐释一个概念,并不代表着最安全的编码实践,因此不应在应用程序或网站中使用该示例代码。对于超出本示例代码的预期用途以外的使用所造成的偶然或继发性损失,Microsoft 不承担任何责任。 |
在 Visual Studio 的“帮助”菜单上,单击“示例”。
有关更多信息,请参见定位示例文件。
示例的最新版本和完整列表可以从 Visual Studio 2008 Samples page(Visual Studio 2008 示例页面)联机获取。
还可以在计算机的硬盘上查找示例。默认情况下,示例和自述文件将复制到 /Program Files/Visual Studio 9.0/Samples/ 下的文件夹中。对于 Visual Studio 速成版,所有示例都位于联机位置。
生成并运行示例
所有计算机必须运行 Windows 2000 或更高版本才能运行此示例。
生成并运行此示例
打开解决方案 DCOM.sln。在“生成”菜单中,单击“生成解决方案”。
将 DrawServ.exe 和 ATLDraw.exe 或 DrawCtl.dll 复制到要在其上运行此示例的每台计算机。通过运行带命令行参数 /RegServer 或 -RegServer(这不区分大小写)的 DrawServ,在每台计算机上注册服务器。例如:
复制代码
C:/ATL> DrawServ /RegServer
(必须注册 ATL.DLL 才能正常工作。) 必须将服务器复制到每个客户端以便在每个客户端上注册服务器的 CLSID 和服务器类型库。
通过使用“控制面板”中的“服务”图标,启动服务器上的服务。
在每个客户端,使用 DCOMCNFG 实用工具(从命令行运行它)选择 DrawServ 类的“属性”。从“位置”选项卡中选择“在下列计算机上运行应用程序”。输入要在其上运行服务器对象的计算机的名称。
运行 ATLDraw 并从每个客户端的菜单中选择“服务器连接”。通过按住鼠标左键并沿直线拖动,在客户端窗口中绘制线条。绘制的线条应显示在连接到同一服务器的每个客户端上。也可以使用“视图”中的“颜色”菜单选项来更改每个客户端的颜色。
如果 DrawServ 示例的路径包含空格,它将不能正确注册。解决此问题的一个方法是编辑相应的 .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
相关文章推荐
- DCOM 示例:演示如何远程调用 COM 对象
- 如何对远程对象进行异步调用(示例代码)
- DCOM揭秘之六——远程COM调用(服务器端和客户端)
- 如何实现DCOM或者COM+的远程调用
- Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库 自定义日志记录功能,按日记录,很方便 C#常量和字段以及各种方法的语法总结 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法 asp.net webapi 自定义身份验证
- 下面的示例演示如何使用传递到事件处理方法的 GridViewCommandEventArgs 对象确定引发事件的按钮的命令名。
- DCOM远程调用权限设置
- spring单例和多例详解。如何在单例中调用多例对象
- python调用win32com创建可响应应用事件的文档对象
- Java - 如何通过反射调用对象的方法?
- Dubbo远程调用服务框架原理与示例
- Inside VCL:接口指针调用函数的时候,如何获得对象指针以完成函数调用?
- 演示Session对象使用 范例(示例代码下载)
- spring单例和多例详解。如何在单例中调用多例对象
- 用对象模式实现QTP的远程调用
- .NET中如何在调用COM的时候得到返回参数值
- 以按值传递的方法,调用远程对象的Remoting
- 基于Hessian的高性能远程对象调用的服务器端和客户端的Demo
- COM线程模型 - MTA接口 - Part III -(STA套间调用MTA对象)