2024年3月14日发(作者:)

VC下DCOM的Server和Client编程

VC下DCOM的Server和Client编程

1、 COM原理介绍

与所有的COM通信一样,只有在客户请求一个服务器的接口时才会开始。

在DCOM中,客户端调用CoCreateInstanceEx(),传送服务器计算机的一个

描述和请求一个类标识器(CLSID)和接口。该请求由服务控制管理器处理

(Service Control Manager,SCM),它是Windows的一部分。SCM负责在

服务器计算机上创建和激活COM对象。在DCOM中,SCM将尝试启动远程计

算机上的服务器。DCOM客户调用服务器组件过程如图一:

图一、客户端远程调用服务器端组件示意图

一旦创建了远程的COM服务器,所有的调用将通过proxy和stub对象配

置。proxy和stub使用RPC(Remote Procedure Calls,远程过程调用)进

行通信,RPC处理所有网络交互。在服务器端,stub对象负责配置,而客户端

则由proxy负责。

本例子以银行一个用户(Account)的存钱(Deposit)和取钱(Withdraw)简单

模型用COM来具体实现。本例子中用到的一个IAccount接口,这个接口的成

员函数有四个:

a、Deposit(double x)-用来对一个账户存钱;

b、Withdraw(double x)-用来对一个账户取钱;

c、CurrentAccount(double newVal) –设置当前账户的余额;

d、CurrentAccount(double *pVal)- 获取当前账户的余额;

其中函数3和4是当你在定义一个接口属性时生成的两个函数,3表示设置

属性值,4表示获取属性值;

作为和COM编程有所比较,在下面描述编程具体过程时,我会指出DCOM

编程和COM编程在实现时有那些区别,那些需要特别注意的地方。

注:这个例子和我写的VC下COM编程中的例子是一样的

2、 服务器端编程

2.1、概述

DCOM组件服务器端的编程和COM编程没有太大的区别,不过如果你以

前使用的是进程内的服务器(.dll),你将需要作一些改变。进程内的服务器是一

个DLL,它和客户进程在同一个进程内,不可以跨网络载入使用,不可以通过

- 1 - 2004年2月20日 我的体会给你帮助,你的建议让我提高

VC下DCOM的Server和Client编程

远程连接工作。简单的方法是重新使用ATL向导创建服务器,并且将代码由DLL

改成到EXE中。

在编译后,我们需要将客户端的EXE拷贝到客户计算机。要注意的是,由

于IAccount是一个用户自己定义的接口,因此需要一个proxy/stub DLL(也

就是图一中Proxy Object和Stub Object)并且在客户端和服务端计算机中注

册该proxy/stub DLL。如果你使用一个带类库的自动服务器,你还需要将类库

拷贝到客户计算机,并且登记它。

2.2、逻辑实现(和COM编写服务器端类似)

a、用ATL COM AppWizard新建一个工程;

b、在工程中插入一个对象(object),定义接口的名字;

c、定义接口函数;

d、在类中对接口函数编写服务代码,使接口在被客户访问时提供服务;

e、编译生成服务器端程序和proxy/stub DLL

f、在服务器端进行注册

2.3、具体实现

a、用ATL COM AppWizard新建一个工程,工程名为:Bank(图二)

图二、新建工程的界面

b、选择组件提供服务时所用的类型(.dll 或 exe),这儿必须要选用.exe(图

三)

- 2 - 2004年2月20日 我的体会给你帮助,你的建议让我提高