华为得面试题目。我得回答是:
    当新版本得DLL发生了变化,那么以前程序引用DLL的LIB文件大小和格局就可能发生变化,这样以往的程序在使用这个DLL的时候就会出现错误,主要是地址访问越界。他们说不对,即使大小发生变化也可以使用,我不明白了,请各位高手解释一下

解决方案 »

  1.   

    COM并不是一种实现方法,它只是一种接口标准:-) 使用COM的目的是通用化实例.是实例!! :-) 而不是对象.
      

  2.   

    COM是使软件组件像对象一样彼此交互的一种二进制标准。引入COM可以解决调用DLL时
    必须将其加载到调用进程地址空间的弊端,有利于进程间通信。
      

  3.   

    精典呀!引入COM可以解决调用DLL时必须将其加载到调用进程地址空间的弊端,有利于进程间通信。重要的是COM是一个进程那服务程序
      

  4.   

    COM使程序之间的各部分的耦合性降低了,真正做到了各个组件独立开发,只通过接口通信,便于组件的开发和升级管理。
      

  5.   

    如果是在一个团队里,程序也不大,用dll也没有什么不可以,都有源程序,开发调试比com要好多了.com优点很多,缺点也一堆
      

  6.   

    《COM本质论》中第一章有详解!!
      

  7.   

    (1)函数重名问题  DLL里是一个一个的函数,我们通过函数名来调用函数,那如果两个DLL里有重名的函数怎么办?  (2)各编译器对C++函数的名称修饰不兼容问题  对于C++函数,编译器要根据函数的参数信息为它生成修饰名,DLL库里存的就是这个修饰名,但是不同的编译器产生修饰的方法不一样,所以你在VC里编写的DLL在BC里就可以用不了。不过也可以用extern "C";来强调使用标准的C函数特性,关闭修饰功能,但这样也丧失了C++的重载多态性功能。  (3)路径问题  放在自己的目录下面,别人的程序就找不到,放在系统目录下,就可能有重名的问题。而真正的组件应该可以放在任何地方甚至可以不在本机,用户根本不需考虑这个问题。  (4)DLL与EXE的依赖问题  我们一般都是用隐式连接的方式,就是编程的时侯指明用什么DLL,这种方式很简单,它在编译时就把EXE与DLL绑在一起了。如果DLL发行了一个新版本,我们很有必要重新链接一次,因为DLL里面函数的地址可能已经发生了改变。DLL的缺点就是COM的优点。
      

  8.   

    函数的地址发生改变??只要DLL中函数名和参数不改变,EXE就不必再编译连接了吧?
    ---------------
    (4)DLL与EXE的依赖问题  我们一般都是用隐式连接的方式,就是编程的时侯指明用什么DLL,这种方式很简单,它在编译时就把EXE与DLL绑在一起了。如果DLL发行了一个新版本,我们很有必要重新链接一次,因为DLL里面函数的地址可能已经发生了改变。DLL的缺点就是COM的优点。