这个过程称为"静态链接",此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行 。在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源 。
从上面的说明可以看出,DLL和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误 。微软的Visual C++支持三种DLL,它们分别是Non-MFC Dll(非MFC动态库)、Regular Dll(常规DLL)、Extension Dll(扩展DLL) 。
Non-MFC DLL: 指的是不用MFC的类库结构,直接用C语言写的DLL,其导出的函数是标准的C接口,能被非MFC或MFC编写的应用程序所调用 。Regular DLL: 和下述的Extension Dlls一样,是用MFC类库编写的,它的一个明显的特点是在源文件里有一个继承CWinApp的类(注意:此类DLL虽然从CWinApp派生,但没有消息循环),被导出的函数是C函数、C++类或者C++成员函数(注意不要把术语C++类与MFC的微软基础C++类相混淆),调用常规DLL的应用程序不必是MFC应用程序,只要是能调用类C函数的应用程序就可以,它们可以是在Visual C++、Dephi、Visual Basic、Borland C等编译环境下利用DLL开发应用程序 。
常规DLL又可细分成静态链接到MFC和动态链接到MFC上的,这两种常规DLL的区别将在下面介绍 。与常规DLL相比,使用扩展DLL用于导出增强MFC基础类的函数或子类,用这种类型的动态链接库,可以用来输出一个从MFC所继承下来的类 。
扩展DLL:是使用MFC的动态链接版本所创建的,并且它只被用MFC类库所编写的应用程序所调用 。例如你已经创建了一个从MFC的CtoolBar类的派生类用于创建一个新的工具栏,为了导出这个类,你必须把它放到一个MFC扩展的DLL中 。
扩展DLL 和常规DLL不一样,它没有一个从CWinApp继承而来的类的对象,所以,开发人员必须在DLL中的DllMain函数添加初始化代码和结束代码 。MID 驱动分析之一: TP下载通过IBM存储解决方案应对信息爆炸问题Qt 游戏开发必备!【下载】Android图书及教学视频您的IT安全来自System X服务器Win8 Winrt中高性能处理多条件语句 。
5. 用C语言编写DLL 一.动态链接库(DLL)结构 ——DLL中定义有两种函数:导出函数(export function)和内部函数 (internal function),导出函数可以被其他模块调用,内部函数只能在DLL内部使用 。
我们在用C++定制DLL文件时,需要编写的就是包含导出函数表的模块定义文件(.DEF)和实现导出函数功能的C++文件 。下面以Sample.dll为例介绍DEF文件和实现文件的结构: ——1.模块定义文件(.DEF)是由一个或者多个用于描述DLL属性的模块语 句组成的文本文件,每个.DEF文件至少必须包含以下模块定义语句: 第一个语句必须是LIBRARY语句,指出DLL的名字 。
EXPORTS语句列出被导出函数的名字 。可以使用DESCRIPTION语句描述DLL的用途(此句可选) 。
";"对一行进行注释(可选) ——2.实现文件(.cpp文件为例) ——实现入口表函数的.cpp文件中,包含DLL入口点处理的API函数和导出 函数的代码 。
6. C++ 制作dll文件 1.在程序前面加一行代码
#pragma comment(linker,"/dll")
意思是告诉连接器,输出的是dll格式 。这个好处是不用手动去修改工程属性 。
- 个人资质怎么写
- 朋友的请柬怎么写
- 群发邮件怎么写
- 润的英文怎么写
- 周末的单词怎么写
- 灾拼音怎么写的
- 借款起诉状书怎么写有范本 借款起诉状
- 飒飒西风满院栽蕊寒香冷蝶难来描写的是什么花 飒飒西风满院栽蕊寒香冷蝶难来描写的是什么花意思
- 杯的繁体字怎么写
- 废寝忘食的寝怎么写