COM与DLL能不能划上等号?他们的分别在那里?

解决方案 »

  1.   

    wks(mex)兄,我希望得到具体的答案!
      

  2.   

    COM是实现了接口的抽象类,而DLL说白了是一个用户对象,一堆函数过程。
      

  3.   

    COM是实现了接口的抽象类,而DLL说白了是一个用户对象,一堆函数过程。
    基本同意
      

  4.   

    COM可以做成.dll,.exe,.ocx单纯的.dll只存放函数,不存放对象
      

  5.   

    1、com是一个二进制标准,dll是一种文件格式;
    2、com的实现可以以dll文件为基础,因为com既然是一种二进制标准,那么必须提供能被调用的服务,这就类似dll的输出函数。
      

  6.   

    DLL:早期技术。
      我们知道,在C++中我们可以实现一个函数或者一个类,比方实现了一个算法,然后在我们的程序中调用这个函数,然后编译,编了许多个程序,都用了这个函数,然后都编译成独立的exe文件,然后都执行。这样在内存中就会存在这个函数的多个副本(每个exe文件一个),是不是很浪费?
    有了dll好了,dll叫动态连接(上边叫静态连接)库,你的函数在这个dll中实现,然后引出这个函数,(想windows的user32.dll......什么的都是用的这种技术,否则你可以想象,windows会变成多大)。这样你的exe文件就可以在运行时装载这个dll文件,然后调用里面的函数,你的exe文件中其实并不存在这个函数,这样你的exe文件不就小多了吗?
    而exe文件运行时会检查dll库是否已经在内存中,如果在内存中就直接使用了,否则将装载dll库,这样在内存中就会存在这个函数的一个副本,所有的程序都用这个副本,这样就大大节省了内存。
      

  7.   

    刚才说过了DLL是早期技术,dll有他的局限性,比方你在dll中实现了一个类,而在外部你无法直接用这个类(函数可以),而dll的发布在方法上虽然兼容,但在数据上却兼容性不好,而一个类既封装有方法也封装有数据,所以涉及到一个dll的多个版本的时候比较麻烦,因为传统的面向对象的方法只实现了原代码级的多态和继承,却无法实现二进制级的多态和继承。否则vc的mfc.dll的名字也不用每一个版本都换个名字了,直接叫mfc.dll得了。
      

  8.   

    正因为dll存在诸多缺点,所以微软开发了com技术,用于实现二进制级别的代码复用(一开始的ole技术我就不说了,那只是哗众取宠的技术,微软靠ole打败了borland,borland太冤了)。
    com技术:
    com技术对于自己实现了原代码重用,对于用户,实现了二进制重用,什么叫二进制重用,想象vb下的大量的控件就明白了。
    你想作一个最基本的com,必须做一个接口,这个接口必须直接或间接继承于Iunkown,然后作一个类,这个类也必须继承继承于你作的接口,然后你在类中实现这个接口,接口在c++中用虚基类实现。
    这样这个com组件将你一开始作的接口暴露给用户(当然还涉及到组件注册,注册表,ole2,内容太多了)
    如果你调用这个组件,如果是自动化的就好办了,导入就可以了,delphi会把所有的工作替你作了。否则,你要把刚才编的接口复制过来(如果是c++编的,你把他改写成delphi的接口),这样你就可以直接用这个借口了,调用的时候程序会在注册表查找接口id,然后找到dll(ocx)文件,然后装载。
    这样你就可以想调用自己写的类那样调用com组件。可以想象一下。单纯的dll绝对实现不了。