COM与DLL能不能划上等号?他们的分别在那里?
解决方案 »
- 一段看不明白道理的热键设置代码
- 初学者菜鸟问题
- 请问如何把DateTimePicker的日期提取出来,我想把时间存到一个ValueListEditor里
- webservice服务器端使用控件就报错?
- 求助:怎么预览时qrlable1的caption没改变?
- sunnf接分,原因见里面url
- 如何找到异常出在什么地方?然后进行相应的异常处理?
- 那里有BusinessSkinForm组件的使用方法介绍
- 闪现窗体怎么做?
- 找个Delphi7好用的FastReport,最好有地址。。
- 求救!!高手请帮帮我!
- 用H1:=findwindow(nil,'某网页标题')后,如何遍历该网页窗口内的所有控件,然后对各控件发送消息?
基本同意
2、com的实现可以以dll文件为基础,因为com既然是一种二进制标准,那么必须提供能被调用的服务,这就类似dll的输出函数。
我们知道,在C++中我们可以实现一个函数或者一个类,比方实现了一个算法,然后在我们的程序中调用这个函数,然后编译,编了许多个程序,都用了这个函数,然后都编译成独立的exe文件,然后都执行。这样在内存中就会存在这个函数的多个副本(每个exe文件一个),是不是很浪费?
有了dll好了,dll叫动态连接(上边叫静态连接)库,你的函数在这个dll中实现,然后引出这个函数,(想windows的user32.dll......什么的都是用的这种技术,否则你可以想象,windows会变成多大)。这样你的exe文件就可以在运行时装载这个dll文件,然后调用里面的函数,你的exe文件中其实并不存在这个函数,这样你的exe文件不就小多了吗?
而exe文件运行时会检查dll库是否已经在内存中,如果在内存中就直接使用了,否则将装载dll库,这样在内存中就会存在这个函数的一个副本,所有的程序都用这个副本,这样就大大节省了内存。
com技术:
com技术对于自己实现了原代码重用,对于用户,实现了二进制重用,什么叫二进制重用,想象vb下的大量的控件就明白了。
你想作一个最基本的com,必须做一个接口,这个接口必须直接或间接继承于Iunkown,然后作一个类,这个类也必须继承继承于你作的接口,然后你在类中实现这个接口,接口在c++中用虚基类实现。
这样这个com组件将你一开始作的接口暴露给用户(当然还涉及到组件注册,注册表,ole2,内容太多了)
如果你调用这个组件,如果是自动化的就好办了,导入就可以了,delphi会把所有的工作替你作了。否则,你要把刚才编的接口复制过来(如果是c++编的,你把他改写成delphi的接口),这样你就可以直接用这个借口了,调用的时候程序会在注册表查找接口id,然后找到dll(ocx)文件,然后装载。
这样你就可以想调用自己写的类那样调用com组件。可以想象一下。单纯的dll绝对实现不了。