IT学习站-137zw.com

作者: Jacqueline季
查看: 83|回复: 0

more +资源更新Forums

more +随机图赏Gallery

2019开运网付费开源商业版|风水起名八字算命易经周易源码...2019开运网付费开源商业版|风水起名八字算命易经周易源码...
网易课堂马丁的Illustrator(Adobe AI)大师课,90节完整版网易课堂马丁的Illustrator(Adobe AI)大师课,90节完整版
价值9999元 筑龙造价全专业(20191214_114251)精品课程推荐价值9999元 筑龙造价全专业(20191214_114251)精品课程推荐
微专业 - Java高级开发工程师(完整版)微专业 - Java高级开发工程师(完整版)
曾奇峰的心理课精神分析30讲,带你深入潜意识,解密你不...曾奇峰的心理课精神分析30讲,带你深入潜意识,解密你不...
词霸天下之3万词汇速记进阶 入门到精通彻底攻克英语完整版词霸天下之3万词汇速记进阶 入门到精通彻底攻克英语完整版

创建最简单的exe形式COM组件并在MFC程序调用

创建最简单的exe形式COM组件并在MFC程序调用

[复制链接]
Jacqueline季 | 显示全部楼层 发表于: 2019-11-14 11:55:00
Jacqueline季 发表于: 2019-11-14 11:55:00 | 显示全部楼层 |阅读模式
查看: 83|回复: 0
来新公司学习接手新项目,拿到代码打开解决方案看到里面竟然有40几个工程,有点吃惊。具体看代码也有很多之前没见过的写法,上了几天火。
有件事就没太搞明白,按照文档的说法上层很多软件都要调用IO服务器,但看程序安装目录,IO服务器其实是一个exe程序,按照我之前的印象,能被别的程序调用的也得是动态库、静态库或者服务。实在想不通exe程序怎么作为接口被别的程序调用的。
结果昨天研究了一天,想通了,这个IO服务器其实就是COM组件。

按照网上的说法:COM component(COM组件)是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块。

COM组件可以是dll或者exe或者服务的形式。

按照这个思路,代码就看懂了不少,之所以解决方案里有那么多工程,也不过是因为划分了很多动态库和COM组件。

又花了些时间,写了个小程序来实现最简单的exe形式COM组件的生成与调用,如下:

首先建立一个ALT工程:
创建最简单的exe形式COM组件并在MFC程序调用  技术博客 726249-20190909144607059-1071737642


创建最简单的exe形式COM组件并在MFC程序调用  技术博客 726249-20190909144848377-262535126


创建最简单的exe形式COM组件并在MFC程序调用  技术博客 726249-20190909144859074-35949895


在类视图里,为工程添加ALT的类,和接口:
创建最简单的exe形式COM组件并在MFC程序调用  技术博客 726249-20190909144705355-1271321442

这里定义了类,和对应的接口(Interface),注意ProgID要写,待会程序调用com接口时,要通过ProgID找com组件
创建最简单的exe形式COM组件并在MFC程序调用  技术博客 726249-20190909144724758-91275019

之后项目目录如下,在.idl文件里有com接口(interface),里面还定义了com组件的id等等不赘述了,实现类在ATLTest.cpp里,其对应关系都是vs自动搭建的。
创建最简单的exe形式COM组件并在MFC程序调用  技术博客 726249-20190909145218954-1278934044

接下来还是在类视图里具体添加方法(接口和实现):
创建最简单的exe形式COM组件并在MFC程序调用  技术博客 726249-20190909145709063-1190683613


方法内部写程序,逻辑是两数求和:
然后编译会出错,那是因为执行com组件注册命令时候,缺乏管理员权限,
重新启动vs,以管理员权限运行即可。

接下来建一个mfc项目,这不是今天主题就不赘述了,
在界面上简单填个按钮和输入框,写个两数求和的图形界面demo,
具体的求和的方法要调用com组件。

mfc项目里添加com接口,在类向导里选择添加类,选atl,选TypeLib中的MFC类:
创建最简单的exe形式COM组件并在MFC程序调用  技术博客 726249-20190909150453877-791153047


之后可以选取前面定义的Lib:
创建最简单的exe形式COM组件并在MFC程序调用  技术博客 726249-20190909150342028-1978857940


加入COM接口文件后,就可以调用了,注意我下面的写法:
运行效果:
创建最简单的exe形式COM组件并在MFC程序调用  技术博客 726249-20190909150920727-563676178


上面有说的简略的地方,具体可以看我上传git的源码:
https://github.com/SonnAdolf/MyAtlExeComDemo


额外内容:
动态链接库和COM组件的区别
     1动态链接库的表现形式只能是dll[变态该名的除外], COM组件的表现形式可以是dll也可以是exe。
     注:其实字体、驱动等也算是动态链接库的一种,这里略去...
     2 动态链接库的生成和编译器及系统相关,在Windows/Linux下系统,需要分别编译才能使用。
          COM组件是二进制编码,在Windows和Linux下可以直接使用,不需要重新编译。
     3 COM组件是按照COM规范实现的dll或者exe;动态链接库是一个可以导出函数的函数集合。
     4 动态链接库只能在本机被调用,COM组件支持分布式使用。


来源:http://www.137zw.com
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
137zw.com IT学习站致力于免费提供精品的java技术教程和python技术教程,CCNA书籍/资料/CCNP书籍/资料教程/CCIE书籍/资料/H3C学习/认证/一级建造师考试/微软学习/认证/包括基础教程和高级实战教程,同时也提供分享网站源码下载和互联网相关一系列的技术教程,我们想做的就是让知识分享更有价值!(IT学习站官方唯一域名地址:www.137zw.com 请谨防假冒网站!)本站所有资源全部收集于互联网或网友自行分享,分享目的仅供大家学习与参考,如无意中侵犯您的合法权益,请联系本站管理员进行删除处理!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

浙ICP备19022368号-1|Archiver|手机版|IT学习站-137zw.com

GMT+8, 2020-7-4 18:16 , Processed in 0.250006 second(s), 52 queries .

快速回复 返回顶部 返回列表