在创建MFC动态库的时候,会在/Debug目录下面生成.lib和.dll两个文件,.lib文件很小,只有2K左右,而.dll通过选择使用MFC动态链接和静态链接会有文件大小比较大的变化,不知道是什么原因?望各位大侠拍砖。

解决方案 »

  1.   

    一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。 
      

  2.   

    在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。
      

  3.   

    可以设置工程,让它是否导出lib库
      

  4.   

    静态加载:#pragma comment(lib, "XXX.lib")
    动态加载:LoadLibrary(...);FreeLibrary(..);
      

  5.   

    静态加载:#pragma comment(lib, "XXX.lib")
    动态加载:LoadLibrary(...);FreeLibrary(..);
    楼上的  下班吃饭时间就开始回答问题~! 无奈了
      

  6.   

    .lib是一些索引声明,有它的话,程序可以编译通过,生成可执行程序,但是运行exe后会提示找不到dll,所以dll最好放在system32下
      

  7.   


    .dll是在你的程序运行的时候才连接的文件,因此它是一种比较小的可执行文件格式所有的.dll文件都是可执行。 .lib是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的lib文件在那里。一般来说,与动态连接文件相对比,lib文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用lib文件,就必须: 1 包含一个对应的头文件告知编译器lib文件里面的具体内容 2 设置lib文件允许编译器去查找已经编译好的二进制代码如果你想从你的代码分离一个dll文件出来代替静态连接库,仍然需要一个lib文件。这个lib文件将被连接到程序告诉操作系统在运行的时候你想用到什么dll文件,一般情况下,lib文件里有相应的dll文件的名字和一个指明dll输出函数入口的顺序表。如果不想用lib文件或者是没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress等函数来调用.dll中的函数,比起有lib文件时调用.dll中的函数稍微麻烦些
      

  8.   

    创建动态库,都是一个DLL和一个Lib,还有一堆obj,pdb呢
      

  9.   

    补充下5楼,静态加载Release版的时候也是用DLL的.(AFX_EXT_CLASS导出类的时候)
      

  10.   

    这个就是麻烦,一个DLL光有.dll不算,还有.lib,还要.h,很辛苦。