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日 我的体会给你帮助,你的建议让我提高


发布评论