例程详析动态链接库
2008-02-23 05:38:34来源:互联网 阅读 ()
动态链接和静态链接是相对立的。静态链接的时候,可执行程式内包含了所访问的函数的代码,可执行程式占用的空间较大;但运行时,无需其他模块支持,从而速度相对较快。动态链接的可执行程式中不包含动态访问的函数代码,仅仅包含对他的参考,运行时需要其他模块(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();
好了,到这里我们任何的功能就都实现了,快编译运行一下吧!怎么样?还满意吗?
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: unix下编写socket程式的一般步骤
下一篇: 局部类和嵌套类
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash