MFC、共享库、静态库

来源:互联网 发布:淘宝批量删除宝贝 编辑:程序博客网 时间:2024/05/21 21:48

VC工程-设置里的使用MFC作为共享的DLL ,使用MFC作为静态链接库 二者有何区别,各有什么好处??
而且用MFC开发的程序里如果用到了其它的动态库,就要加载这些动态库,分为动态加载和静态加载,选用动态加载或者静态加载和前面那个选使用MFC作为共享的DLL和使用MFC作为静态链接库有什么关系吗??



VC工程-设置里的使用MFC作为共享的DLL ,使用MFC作为静态链接库,这两选择就是让你选择使用动态库还是使用静态库。

选择动态库(使用MFC作为共享的DLL)的话,就是在发布程序时要把mfc42.dll,msvcrt.dll这两个文件一同打包。

      在没有VC环境的机器上不能运行程序,只需要从将安装VC的系统中的system32文件夹里面将MFC42D.DLL、MFCO42D.DLL和MSVCRTD.DLL拷贝出来,和可执行文件放在一起,或者干脆也放到目标机器的system32文件夹里面,就可以了。

选择静态库(使用MFC作为静态链接库)就是生成的文件会大些。


动态加载和静态加载只不过是动态库加载的两种方式。



在安装目录下,有个文件: 如:E:\vc6.0\Tools\DEPENDS.EXE用它查看程序依靠什么DLL存在, 则可以运行了.(然后把其dll与exe文件一起发布即可)




用MFC作为共享的DLL和作为静态链接库有什么区别
Release设置为静态的,生成的exe文件比  
Debug设置为共享的DLL生成的exe还要大

------解决方案--------------------------------------------------------
共享DLL, EXE小,但是如果系统中没有这个DLL,就无法运行。

 静态链接,是把代码链接到EXE中,EXE大,但是不依赖那个DLL了。 
------解决方案--------------------------------------------------------
没有安装vc的机器也能运行静态链接的,如果动态链接你还要带着一个mfcxxx.dll才能在没有vc的机器上运行 
------解决方案--------------------------------------------------------
每个进程载入的 MFC 静态的库不能超过 64 个,且 size 比较大;

动态链接的缺点是安装发布的时候必须带 MFC42/MSVCRT 等,优点是没有这个 64 的限制。 
------解决方案--------------------------------------------------------
静态链接,将DLL库的内容,直接添加到生成的EXE中,并作为EXE文件的一个静态部分运行。作为静态链接,你不需要担心运行时需要的相关库文件,因为都链接到EXE文件中了。
动态链接,生成的EXE文件,公包括EXE内部的内容,运行时,根据需要,加载相应的DLL。作为动态链接,你需要将运行时相关的DLL库文件放到相关的地方(1、与EXE同文件夹;2、系统环境变量Path指定的其它路径)。

关于内存访问,使用静态链接,在DLL中动态分配(new)的内存,只能由DLL回收(delete),强制EXE回收可能会有异想不到的结果。动态链接,在DLL里动态分配(new)的内在,可由EXE回收(delete)。