用mfc制作的一个系统: 发布的时候有两种情况:
1,部分机器用动态链接  + mfc的一部分dll文件, 
2,部分机器用静态链接
1种情况好用的占多数,在1下好用的在2下就一定不好用。
这是什么原因?动态链接与静态链接的区别我是基本明白,但是这个错误去不知道怎么处理

解决方案 »

  1.   

    动态链接的话,用depends看看需要哪些DLL,附带上就行了一般大工程多用动态链接,因为不只一个exe或者dll,用静态链接会浪费空间
      

  2.   

    如果你用动态链接(Using MFC shared Lib), 你必须要用到MFC42.dll, 主应用程序会比较小, 因为, 基础库代码关联在MFC42.DLL中
    如果你用静态链接, 也就是与C Runtime Lib或MFC static Lib进行合并, 实际上是目标文件的链接通常如你所说动态链接和静态链接的主应用程序会有细微差异, 这是由于MFC42.dll库通常在windows\system32中已存在, 并且不同的
    操作系统(win2k/xp/vista)所带的mfc42.dll版本不同, 因此, 相对于SDK中的C Runtime Lib或MFC static Lib会有所不同, 因此, 产
    生程序运行时有细微差异.
      

  3.   

    所谓动态连接库,也就是在程序运行时,动态将DLL加载至内存,之后再映射进进程地址空间。这个明显在程序启动阶段会节省很多资源,尤其是大工程,如果用到很多DLL,全部一次加载,是比较浪费资源的。动态连接库的好处有很多,比如系统DLL,只需要在内存中存在一份即可,进程间可以共享,节省系统资源。
    对于希望客户订制的开发商来说,可以提供一种规格,留给客户自己升级加强程序功能。等等,动态连接有很多好处。另外你提到的静态连接出错,估计应该是在你程序DLL中调用到了系统尚未加载的其他DLL,动态加载时通常这些已经成功初始化。自己看法。
      

  4.   

    个人认为3楼说得很清楚了.但是如果得到更为细致的描述,不妨参考一个侯俊杰的<深入浅出MFC>.
      

  5.   

    使用静态连接,就不再需要关联额外的一些DLL,
    使用动态链接,还需要关联额外的一些DLL,
    在1下好用的在2下就一定不好用是因为2的环境下少了那些要关联的额外的DLL,
      

  6.   

    如果你用动态链接(Using MFC shared Lib), 你必须要用到MFC42.dll, 主应用程序会比较小, 因为, 基础库代码关联在MFC42.DLL中 
    如果你用静态链接, 也就是与C Runtime Lib或MFC static Lib进行合并, 实际上是目标文件的链接 通常如你所说动态链接和静态链接的主应用程序会有细微差异, 这是由于MFC42.dll库通常在windows\system32中已存在, 并且不同的 
    操作系统(win2k/xp/vista)所带的mfc42.dll版本不同, 因此, 相对于SDK中的C Runtime Lib或MFC static Lib会有所不同, 因此, 产 
    生程序运行时有细微差异.
      

  7.   

    你的结论是怎么得出的,我使用MFC的体会是:用静态库都没问题,用动态库比较容易出问题。
      

  8.   

    不会是好 dll文件的问题,我已经全部加进去了 
    感觉三楼说的对,但是这种问题有没有解决的办法?总不能给客户两个东西,一个不好用的时候让他换另另一个。