例程详析动态链接库 DLL

  例程详析动态链接库  
            bull77  
   
   
    动态链接库(DLL,即   Dynamic-Link   Library)是可执行的模块,但它没有自己的堆栈,必须在调用动态链接库函数的程序  
   
  环境下运行。动态链接库不仅可以作为一个运行模块,包括函数代码,而且可以包含程序以外的任何数据或资源(位图、图标  
   
  等等)。动态链接库就是给应用程序提供函数或者资源。  
   
    动态链接与静态链接是相对立的。静态链接的时候,可执行程序内包含了所访问的函数的代码,可执行程序占用的空间较  
   
  大;但运行时,不需要其他模块支持,从而速度相对较快。动态链接的可执行程序中不包含动态访问的函数代码,仅仅包含对  
   
  它的参考,运行时需要其他模块(DLL)的支持,速度相对较慢。  
   
    动态链接库是Windows的一种极其重要的技术。它使得开发人员可以通过编写动态链接库,方便灵活的实现大型程序的开  
   
  发,按自己的意愿对操作系统进行扩展。  
   
    下面通过例子介绍如何在动态链接库中定义函数、资源、和类以及如何在工程中使用动态链接库中已定义的函数、资源、  
   
  类。  
   
  一、   函数的定义和使用方法:  
   
    第一步:  
   
     运行AppWizard,定义项目名为mydll,选择MFC   AppWizard(dll),而不是MFC   AppWizards(exe)。  
   
    第二步:  
   
     在这个例子中,只有一个AppWizard屏幕出现,选择MFC扩展DLL(MFC   Extension   DLL   (using   shared   MFC   DLL),点击  
   
  FINISH生成工程。  
   
    第三步:  
   
     点击File中的New,选择C/C++   Header   File,File   Name中输入dll,点击OK,创建dll.h。输入extern   "C"   __declspec(dllexport)    
   
  int   fun(int   x1,int   x2,int   x3);   ,保存。  
   
    第四步:  
   
     点击File中的New,选择C++   Source   File,File   Name中输入dll,点击OK,创建dll.cpp。输入  
   
    #include   "stdafx.h"  
    #include   "dll.h"  
    extern   "C"   __declspec(dllexport)   int   fun(int   x1,int   x2,int   x3)  
     {  
      return   x1+x2+x3;  
     }  
   
    编译生成mydll.dll和mydll.lib。  
   
    第五步:  
   
    选择Project   中Add   To   Project   中的New   ,   重新生成一个工程,选择MFC   AppWizards(exe),项目名为mydlltest   ,   选择Single    
   
  Document   ,点击FINISH,生成一个新的工程。选择菜单中的Project   àSet   Active   Project   àmydlltest   ,将mydlltest设为当前活动工程  
   
  。  
   
    第六步:  
   
    拷贝…/mydll/debug/mydll.dll   到   ../mydlltest/debug/下,拷贝…/mydll/debug/mydll.lib到…/mydlltest/目录下。  
   
    第七步:  
   
    在mydlltestView.cpp中的#endif下添加  
   
    extern   "C"   __declspec(dllimport)   int   fun(int   x1,int   x2,int   x3);  
   
    在void   CMydlltestView::OnDraw(CDC*   pDC)中添加代码如下:  
   
    void   CMydlltestView::OnDraw(CDC*   pDC)  
     {  
      CMydlltestDoc*   pDoc   =   GetDocument();  
      ASSERT_VALID(pDoc);  
      //   TODO:   add   draw   code   for   native   data   here  
      int   x=fun(1,2,3);  
      CString   str;  
      str.Format("%d",str);  
      pDC->TextOut(10,10,x);  
     }  
   
    第八步:  
   
    在WorkSpace中的mydlltest   files上点击右键,选择Add   files   to   Project   ,将mydll.dll添加到工程。  
  好了,我们的工作做完了,运行一下看看吧!  
   
  二、   类的添加和使用步骤:  
   
    在mydll中生成一个新类,类的声明处改为class   AFX_EXT_CLASS   CMyClass   ,在此类中和其他类一样添加自己需要的变量  
   
  和函数,编译生成新的dll和lib,重复上面的第六步,在mydlltest中利用上面的方法生成一个myclass.h文件,拷贝mydll中  
   
  myclass.h的所有代码到新生成的myclass.h中。在需要使用dll中CmyClass类的文件中包含myclass.h,然后我们就可以向其他类  
   
  一样使用该类了。  
   
    三、   字符串的定义和使用  
   
    在mydll中定义字符串资源,编译生成新的dll和lib,重复上面的第六步,在mydlltest中的myclass.h中添加   #define   IDS_MYSTR    
   
  1(假设我们定义的字符串资源的ID号为IDS_MYSTR),在需要是要该字符串的地方添加#include   "myclass.h",即可使用该字  
   
  符串了。  
   
    CString   str2;  
    str2.LoadString(IDS_MYSTR);  
   
    四、   对话框的定义和使用  
   
    在mydll中定义对话框资源,生成一个新类CDlg,类的声明处改为class   AFX_EXT_CLASS   CDlg   :   public   CDialog   ,像其他对  
   
  话框一样定义对话框的属性和功能,编译生成新的dll和lib,重复上面的第六步,在mydlltest中利用上面的方法生成一个dlg.h文件  
   
  ,拷贝mydll中dlg.h的所有代码到新生成的dlg.h中。在需要使用dll中此对话框资源的文件中包含dlg.h,然后我们就可以向其他  
   
  对话框一样使用此对话框了。  
   
    CDlg   dlg;  
    dlg.DoModal();    
   
    好了,到这里我们所有的功能就都实现了,快编译运行一下吧!  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值