VC++ 链接库(四)MFC动态链接库

来源:互联网 发布:一级建造师网络培训 编辑:程序博客网 时间:2024/05/21 09:43
      前面也介绍了非MFC动态链接库和MFC动态链接库,现在我们再来说明一下:

(一)MFC DLL的三种形式                                                    

         MFC DLL 有三种形式的MFC DLL(在该DLL中可以使用和继承已有的MFC类)可供 选择,即Regular statically linked to MFC DLL(标准静态链接MFC DLL)Regular using the shared MFC DLL(标准动态链接MFC DLL)以及Extension MFC DLL(扩展MFC DLL)

        第一种DLL的特点是,在编译时把使用的MFC代码加入到 DLL中,因此,在使用该程序时不需要其他MFC动态链接类库的存在,但占用磁盘空间比较大;
        第二种DLL的特点是,在运行时,动态链接到MFC类库,因此减少了 空间的占用,但是在运行时却依赖于MFC动态链接类库;这两种DLL既可以被MFC程 序使用也可以被Win32程序使用;
    调用前两种DLL的应用程序不必是MFC应用程序,只要是能调用类C函数的应用程序就可以
        第三种DLL的特点类似于第二种,做为MFC类库的 扩展,只能被MFC程序使用。 

(二)创建MFC DLL                                                             

      1. VC6新建一个工程MFCDLL,类型为MFC  AppWizard(dll),具体选项为Regular DLL using shared MFC DLL。我们在DllTest.cpp的末尾添加实现代码如下(文件中其他自动生成的代码先不用管):
// DllTest.cpp文件
int add(int a,int b){        return a+b;}int subtract(int a,int b){        return a-b;}
    
       2. 使用时,动态链接库的函数申明是写在def文件中,编译器根据这个文件的函数申明来生成lib文件和dll文件。我们只需要在DllTest.def文件的末尾添加代码如下:
sum  @1;sub   @2;   //后面表示函数的序号
      
     以上两步完成后,即可编译生成DLL了,总共生成DllTest.dll和DllTest.lib两个文件。DLL本身不能运行,所以还需要一个测试程序。
     
      3. 隐式加载MFC DLL并测试
用VC创建一个win32 consoleapplication工程Test(当然这里也可以创建MFC Application[exe]工程),代码如下:
#include <stdio.h> //#include <windows.h> //#include "..\DllTest\DllTest.h"#pragma comment(lib,"DllTest.lib")int add(int a,int b);int subtract(int a,int b); int main(int argc, char *argv[]) {      printf("%d\n",add(5,3));       printf("%d\n",subtract(5,3));     return 0; } 

       注意:直接build有错,讲生成的DllTest.lib文件拷到Test工程目录下,这时#pragma comment(lib,"DllTest.lib")会其效果,重新build错误消失;然后运行出错,将生成的DllTest.dll拷贝进来就可以了。这里使用的是隐式加载的方式,也可以根据上几节中提到的使用显示加载的方式。

原创粉丝点击