例程详析动态链接库

聪明的小金牛

聪明的小金牛

2016-02-19 13:26

下面是个例程详析动态链接库教程,撑握了其技术要点,学起来就简单多了。赶紧跟着图老师小编一起来看看吧!

  动态链接库(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设为当前活动工程。
  
  第六步:
  
  拷贝…mydlldebugmydll.dll 到 ..mydlltestdebug下,拷贝…mydlldebugmydll.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();
  
  好了,到这里我们所有的功能就都实现了,快编译运行一下吧!怎么样?还满足吗?
  
展开更多 50%)
分享

猜你喜欢

例程详析动态链接库

编程语言 网络编程
例程详析动态链接库

链接库动态链接库详细介绍

编程语言 网络编程
链接库动态链接库详细介绍

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

动态链接库编程(二)

Delphi
动态链接库编程(二)

Delphi 动态链接库编程

编程语言 网络编程
Delphi 动态链接库编程

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

动态链接库编程(一)

Delphi
动态链接库编程(一)

在VC中链接动态链接库(DLL)的方法

编程语言 网络编程
在VC中链接动态链接库(DLL)的方法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

C++箴言:只要有可能就推迟变量定义

C++箴言:只要有可能就推迟变量定义

怎样设计网页?怎样制作网页?

怎样设计网页?怎样制作网页?
下拉加载更多内容 ↓