社区
ATL
帖子详情
COM 与DLL有什么本质区别?
tang_12
2010-08-08 01:06:25
如题目,面试时经常被问到,但不知道如何问答
...全文
2419
29
打赏
收藏
COM 与DLL有什么本质区别?
如题目,面试时经常被问到,但不知道如何问答
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
29 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tingsking18
2010-08-12
打赏
举报
回复
COM使用DLL给组件提供动态链接的能力
COM可以说是利用DLL动态链接能力最佳的方法,对于可用DLL解决的问题,都可以用COM组件更好地加以解决。
fangchao918628
2010-08-12
打赏
举报
回复
,一天老O(Office 项目的总工程师)和小B(VB 项目的总工程师)一起喝酒,老O向小B倾诉了他的烦恼:
老O:怎么能让我写的程序C,可以调用其它人写的程序S中的函数?(C表示客户程序,S表示提供服务的程序)
小B:你是不是喝糊涂了?让S作成 DLL,你去 LoadLibrary()、GetProcAddress()、...FreeLibrary()?!
老O:废话!要是这么简单就好了。问题是,连我都不知道这个S程序是干什么的?能干什么?我怎么调用呀?
小B:哦......这个比较高级,但我现在不能告诉你,因为我怕你印象不深。
老O:~!·#¥%……—*......
小B:是这样的,在VB中,我们制定了一个标准,这个标准允许任何一个VB开发者,把他自己写的某个功能的小程序放在VB的工具栏上,这样就好象他扩展了 VB 的功能一样。
老O:哦?就是那个叫什么 VBX 的滥玩意儿?
小B:我呸......别看 VBX 这个东西不起眼儿,的确我也没看上它。但你猜怎么着?现在有成千上万的 VB 程序爱好者把他们写的各式各样功能的 VBX 小程序,放到网上,让大家共享那。
老O:哦~~~,那你们的这个 VBX 标准是什么?
小B:嘿嘿......其实特简单,就是在 VBX 中必须实现7个函数,这7个函数名称和功能必须是:初始化、释放、显示、消息处理......,而至于它内部想干什么,我也管不着。我只是在需要的时候调用我需要的这7个函数。
老O:哦~~~,这样呀......对了,我现有个急事,我先走了。88,你付帐吧......
小B:喂!喂喂...... 走这么急干什么,钱包都掉了:-)
老O虽然丢了钱包,仍然兴奋地冲回办公室,他开始了思考......
1、我的程序C,要能调用任何人写的程序B。那么B必须要按照我事先的要求,提供我需要的函数F1(),F2(),F3(),K1(),K2()。
2、BASIC 是解释执行,因此它的函数不用考虑书写顺序,只要给出函数名,解释器就能找到。但我使用的是 C++呀......
3、C++编译后的代码中没有函数名,只有函数地址,因此我必须改进为用VTAB(虚函数表)表示函数入口:
图二、VTAB 的结构
4、还不够好,需要改进一下,因为所有的函数地址都放在一个表中会不灵活、不好修改、不易扩展。恩,有了!按照函数功能的类型进行分类:
图三、多个 VTAB 的结构
5、问题又来了,现在有2个 VTAB 虚函数表,那么怎么能够从一个表找到另一个表那?恩又有办法了,我要求你必须要实现一个函数,并且这个函数地址必须放在所有表的开头(表中的第一个函数指针),这个函数就叫 QueryInterface()吧,完成从一个表查找到另一个表的功能:(除了QueryInterface()函数,顺便也完成另外两个函数,叫 AddRef() 和 Release()。这两个函数的功能以后再说)
图四、COM 接口结构
6、为了以后描述方便,不再使用上图(图四)的方法了,而使用图五这样简洁的样式:
转载自:
http://www.vckbase.com/document/viewdoc/?id=1485
雪影
2010-08-12
打赏
举报
回复
COM是一种接口规范
DLL只是一种载体而已,
由COM规范写成的DLL,一般叫COM组件
nodiebirdcomeback
2010-08-12
打赏
举报
回复
DLL是种Window系统的文件它可以装载可执行代码和资源,
COM是一种面向对象编程的二进制实现,它需要文件来做
COM组件的载体,而这个可以是DLL形式的文件,也可以是.exe
形式的可执行文件。
magic7004
2010-08-12
打赏
举报
回复
COM和DLL根本就是不同的东西啊....哪个问这个,鄙视它....
米饭和铁锅有什么本质区别呢?
jacks0702
2010-08-12
打赏
举报
回复
com(company),是最常用的国际顶级域名,表示商业网站。
haierfox
2010-08-12
打赏
举报
回复
推荐你一本书,com本质论,看前两章就足够理解了
foreasldjj
2010-08-11
打赏
举报
回复
问题就问得很奇怪,因为两者没有什么可比性。
如果说得是,dll(动态连接库)和lib(静态链接库)的区别,还可以解释。
可以把它们当成一些可以供用户调用的函数
com是一种概念,他出发的目的是解决文件的存储问题,比如在word中存储excel。
他使编程变成了搭积木。由一个个组件来搭软件。
_JeffreyWu
2010-08-09
打赏
举报
回复
COM有3种表现形式,DLL只是一种
visualassist4680
2010-08-09
打赏
举报
回复
第一问这个问题的人,不是自己不明白,就是故意在混淆概念
第二这两个东西的关系就像自来水和婚姻法之间的关系一样
第三楼主考虑一下对方的实力是否值得去
com 是一种标准,一套机制
dll 是一直文件格式, dll 可能实现了com机制,也可能和com 没有任何关系
superdiablo
2010-08-09
打赏
举报
回复
COM的几个本质性的特征
(1) 采用GUID,在一定程度上解决dll hell问题。
(2) 把一组二进制代码用面向对象的方式处理。
(3) 制定了一个统一的二进制代码调用规则。
na_he
2010-08-09
打赏
举报
回复
COM的产生就是为了解决DLL的一些不足,比如二进制码的问题。因此他更加独立,把实现叫给用户,是类重用。而DLL只是简单的对象重用。试想,当DLL的一个功能发生变化之后,所有使用者都可能受到影响。这方面COM则欢迎客户客制化符合于自己的interface。
zjz800800
2010-08-09
打赏
举报
回复
面试官问你的问题不是想让你知道com的巨大理论体系,考察的是你的应用层面,好像是没说,废话,切入正题。
大家知道一般情况下,大家在单位用com或着是dll都是按照具体步骤step by step的去follow。所以考察目的是在应用层面,实质是:在多重继承上dll满足不了同名问题,而com是可以的,其它层面的一般应用dll和com区别不大,只要能回答到这个层面,你的面试就ok了,面试官考察的是c++三大特性的多态。
coolcoffee4051982
2010-08-09
打赏
举报
回复
路过学习
longl215
2010-08-09
打赏
举报
回复
路过学习!!!
Eleven
2010-08-09
打赏
举报
回复
COM是为了二进制兼容而加入了许多限制(COM协议)的DLL
adamwyb
2010-08-08
打赏
举报
回复
路过学习
Summer_King
2010-08-08
打赏
举报
回复
com也可以不以dll的形式出现
tang_12
2010-08-08
打赏
举报
回复
没人要分吗?好像都没有说到最本质的区别
superdiablo
2010-08-08
打赏
举报
回复
COM是一种规范,dll是一种物理文件。
加载更多回复(9)
利用输入法注入
DLL
的IME文件,注意,加载IME文件跟加载普通的
DLL
并没有
本质区别
,所以,可以认为,输入 法其实就是注入到应用程序中的一个
DLL
文件,并且,这种“注入”是不会被杀软和游戏NP 拦截的(至少目前是)。现在,我们已经有...
测试
dll
源代码
vbnet调用mfc生成的
dll
,本质上就是c的东西,和类没有关系。在无意中发现getc是不能使用的函数名,这大概就是后来c#的由来了。函数名还是要小心安排。调用的
dll
1注意是配套的。
Windows进程常用
DLL
模块注入技术
课程结合多种Windows进程常用
DLL
注入技术。 远程线程注入 APC注入,异步调用过程,向目标线程插入待执行任务从而完成注入。 窗口消息注入,指定窗口进程注入,与全局钩子注入类似。 环境块注入,获取进程上下文信息...
用Visual C#制作
DLL
可以看出用Visual C#制作一个
DLL
其实并不是一件很复杂的事件,但对
DLL
的调用却和以往有了较大区别,其中最主要的原因是,用Visual C#或者其他.Net 程序开发语言制作的
DLL
和以前的
DLL
有了实质上的区别。它已经不是...
3dsmax插件开发
其实这都是
dll
改的名字,本质还是
dll
。当宿主程序运行起来的时候,会加载这个文件夹下的所有dlxx扩展名的文件。 如果你想快速写插件,通常使用 maxsdk提供的 vc wizard 最容易创建一个特定的插件框架程序.这里简单说...
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章