DCOM⽰例:演⽰如何远程调⽤COM对象
DCOM ⽰例说明如何从运⾏于不同计算机上的多个客户端调⽤在 Windows 服务中实现的 COM 对象。它由三部分组成:
DrawServ — 实现 COM 对象的 Windows 服务。
ATLDraw — 连接到 DrawServ COM 对象的客户端。
DrawCtl — ATLDraw 的管理版本。
postthreadmessage安全说明:
提供该⽰例代码是为了阐释⼀个概念,并不代表着最安全的编码实践,因此不应在应⽤程序或⽹站中使⽤该⽰例代码。对于超出本⽰例代码的预期⽤途以外的使⽤所造成的偶然或继发性损失,Microsoft 不承担任何责任。
获取⽰例和安装⽰例的说明:
在 Visual Studio 的“帮助”菜单上,单击“⽰例”。
有关更多信息,请参见。
⽰例的最新版本和完整列表可以从(Visual Studio 2008 ⽰例页⾯)联机获取。
还可以在计算机的硬盘上查⽰例。默认情况下,⽰例和⾃述⽂件将复制到 /Program Files/Visual Studio 9.0/Samples/ 下的⽂件夹中。对于 Visual Studio 速成版,所有⽰例都位于联机位置。
⽣成并运⾏⽰例
所有计算机必须运⾏ Windows 2000 或更⾼版本才能运⾏此⽰例。
⽣成并运⾏此⽰例
1. 打开解决⽅案 DCOM.sln。
2. 在“⽣成”菜单中,单击“⽣成解决⽅案”。
3. 将 和 或 DrawCtl.dll 复制到要在其上运⾏此⽰例的每台计算机。通过运⾏带命令⾏参数/RegServer或
-RegServer(这不区分⼤⼩写)的 DrawServ,在每台计算机上注册服务器。例如:
C:/ATL> DrawServ /RegServer
(必须注册 ATL.DLL 才能正常⼯作。)必须将服务器复制到每个客户端以便在每个客户端上注册服务器的 CLSID 和服务器类型库。
4. 通过使⽤“控制⾯板”中的“服务”图标,启动服务器上的服务。
5. 在每个客户端,使⽤ DCOMCNFG 实⽤⼯具(从命令⾏运⾏它)选择 DrawServ 类的“属性”。从“位置”选项卡中选择“在下列计算机
上运⾏应⽤程序”。输⼊要在其上运⾏服务器对象的计算机的名称。
6. 运⾏ 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、CoCreateInstanc
e、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)、
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、GetModuleF
ileName、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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。