作者:HH
时间:2019-01-08
参考文献:
【1】https://blog.csdn.net/mergerly/article/details/8643472
【2】https://www.cnblogs.com/DeeLMind/p/7809115.html
===============================================================================================
关于COM技术的具体原理、技术细节及优缺点,大家可以直接百度获取,这里我将通过大量截图以向导的方式向大家特别是初学者介绍一下COM组件服务的创建过程及如何用客户端去调用该组件提供的服务。当然本文不排除有很多错误和遗漏,如果有热心朋友发现错误,请及时联系我,我将第一时间修改,降低自己的失误对大家的不利影响。
主要内容:
1)创建进程外COM组件服务;
2)创建控制台客户端,对COM组件服务进行调用测试。
具体方法如下:
1.创建ATL的COM组件工程
1.1 添加COM简单对象
1.2 命名简单对象和程序ID
1.3 选择线程模型,默认为单元,我不太理解,估计应该与多例模式类似,客户端每创建一个实例系统会根据注册信息启动一个COM组件进程。单线程,应该是不管有多少个客户端调用该组件服务,系统只创建一个COM服务组件进程,当所有客户端退出并释放资源和反初始化后,COM组件服务进程退出。
两者区别如下图:
1.4 添加方法,在类视图中,给接口添加方法
1.5 实现方法
2. 注册
2.1 重载PreMessageLoop和ParseCommandLine,后面我们通过批处理或cmd命令行,传注册命令时,系统会回调这个两个函数并向系统注册COM信息【其实不重载也可以】
2.2 让DCOM发现刚刚创建的COM组件
3. 注册进程外COM组件服务,创建下图所示的批处理文件并以管理员方式运行
3.1 查看COM组件,WIN+R中输入dcomcnfg,弹出组件服务对话框,找到DCOM配置
3.2 注册表查看,win+regedit 找到HKEY_CLASSES_ROOT,按CTRL+F,输入ATLCOMProject,查到之后可按F3向下查询
注册的目的就是让操作系统知道我们的COM组件在哪里,它的基本信息是什么,当客户端访问请求时,操作系统直接根据注册信息直接找到COM组件并启动起来;好比我们开公司一样,我们需要先到国家登记处,将公司的一些必要信息告诉登记部门,如:公司在哪里,可以干什么,你只有登记过了,才是合法的,才有资格去享受国家的资源,否则你就是黑户,外面客户就没法正常去买你所提供的服务。
4. 创建win32控制台测试工程
在main函数中添加如下代码,注意:头文件需要添加刚刚COM组建编译成功之后生成的.h和.c文件,另外程序ID为之前创建ATL简单对象时,我们随便命名的程序id。具体代码如下图所示:
5. 测试
如果想要代码,可输入:ATL创建进程外COM组件服务(C++)来获取