中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > ATL/COM/ActiveX
初探ATL创建进程外服务器(ATL#2)
作者:hujun614 时间:2001-10-03 09:53 出处:互联网 责编:chinaitpower
              摘要:初探ATL创建进程外服务器(ATL#2)

ATL COM向导可以创建三种服务器类型,动态链接库(DLL,dynamic link library),可执行程序(EXE,executable)及NT的系统服务(Exe,Service),我们知道,WIN32系统运行于保护模式之下,每个应用程序的内存地址都是保护的虚拟的内存地址,进程间的数据通信远较进程内的数据通信更为复杂,因为进程内的线程或对象之间的块数据传递可以直接传递指针,但进程间的数据传递却需借用系统中更为复杂的进程间通信机制,ATL COM对象是怎样在单独的服务器内为其它进程提供服务的呢。

最好的办法当然是实践,做个范例程序试试。

生成的代码的区别:
1、对EXE服务器,向导生成与DLL服务器相同的文件,但没有.DEF文件,毕竟EXE服务器不象DLL服务器一样导出入口函数。DLL服务器通过DllRegisterServer和DllUnRegisterServer导出服务器注册及注销函数。而EXE服务器通过参数
/RegServer和/UnRegServer完成服务器注册及注销功能。
没有DllGetClassObject和DllCanUnloadNow。

2、DLL服务器_Module是CComModule的实例,而EXE服务器的_Module是CComModule的派生类CExeModule的实例,覆盖其UnLock()方法,此外,它定义两个方法MonitorShutdown和StartMonitor。这个新的派生类监视模块上的锁并在适当的时候退出,完成EXE服务器的卸载。

相同之处:
原来对服务器增加ATL对象,属性及方法等,和DLL服务器相同。由系统保证ATL COM对象的跨进程通信。

对于服务器是EXE服务器时,系统提供COM客户一种特殊的对象,叫做"代理",代理是一个对象,它和客户位于相同的地址空间,并且能对目标组件所支持的所有接口作出反应,从客户的角度来说,代理就是组件。
当客户调用某一个组件接口在内的一个方法时,代理把所有的方法参数捆绑于某一可移动的数据结构集合内,并装整个集合通过远程调用发送至本地服务器程序,国为微软的RPC技术使得程序可以跨地址空间进行通信,所以代理能够轻易地将方法参数移入本地服务器的地址空间。
在服务器方,RPC被一个称为占位模块的代码接收,当方法调用完成后,组件将控制权返回给占位模块(连同所有返回参数),占位模块将返回参数捆绑在一起,包装成一个可移动的格式,然后将它们通过RPC返回给代理,代理从返回数据中取出所有的返回值,并将控制权交回客户。

进程外和进程对COM服务器的优点对比。
由于进程外服务器是在独立的进程空间运行,可以使得整个系统更为键壮,因为一个进程的非法操作不会影响另一个进程,尤其是COM服务器不太稳定的时候。
而进程内服务器是在客户相同的进程空间运行,避免了RPC的调用开销,使得调用过程更为高效。速度更快。

ATL向导支持COM服务器提供四种线程模型选项,Single,Apartment,Both,Free,用于支持单线模型,单元线程模型和自由线程模型。下次再学吧。

还是太菜,勤学苦练COM中。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有