没有合适的资源?快使用搜索试试~ 我知道了~
DLL编程深入浅出
资源详情
资源评论
资源推荐
编程深入浅出概论
先来阐述一下 的概念,你可以简单地把 看成一种仓库,它提供给你一些
可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。
静态链接库与动态链接库都是共享代码的方式,它们的区别在于以下两点:QQQQQQQ
采用静态链接库时, 中的指令被全部直接包含在最终生成的 文件中;但采用 时,该
不必被包含在最终 文件中, 文件执行时可以“动态”地引用和卸载这个与 独立的 文件,从
而在运行时节省系统资源。
静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的
动态或静态链接库。
对动态链接库,我们还需建立如下概念:
的编制与具体的编程语言及编译器无关
只要遵循约定的 接口规范和调用方式,用各种语言编写的 都可以相互调用。譬如 Windows
提
供的系统 其中包括了 的 ,在任何开发环境中都能被调用,不在乎其是 !
"、!##还是 $%。
动态链接库随处可见
我们在 目录下的 &' 文件夹中会看到 '、!' 和 (',
的大多数 都包含在这些 中。' 中的函数主要处理内存管理和进程调度;!' 中的
函数主要控制用户界面;(' 中的函数则负责图形方面的操作。
一般的程序员都用过类似 )(" 的函数,其实它就包含在 !' 这个动态链接库中。由此
可见 对我们来说其实并不陌生。
' 动态链接库的分类
!##支持三种 ,它们分别是 *)+非 )+ 动态库、)+,(!)+ 规则
、)+-&)+ 扩展 。
非 )+ 动态库不采用 )+ 类库结构,其导出函数为标准的 接口,能被非 )+ 或 )+ 编写的应
用程序所调用;)+ 规则 包含一个继承自 $$ 的类,但其无消息循环;)+ 扩展 采用 )+
的动态链接版本创建,它只能被用 )+ 类库所编写的应用程序所调用。
由于本文篇幅较长,内容较多,势必需要先对阅读本文的有关事项进行说明,下面以问答形式给出。
问:本文主要讲解什么内容?
答:本文详细介绍了 编程的方方面面,努力学完本文应可以对 有较全面的掌握,并能编写大多
数 程序。
问:如何看本文?
答:本文每一个主题的讲解都附带了源代码例程,可以随文下载每个工程都经 *,, 压缩。所有
这些例程都由笔者编写并在 ##. 中调试通过。
当然看懂本文不是读者的最终目的,读者应亲自动手实践才能真正掌握 的奥妙。
问:学习本文需要什么样的基础知识?
答:如果你掌握了 ,并大致掌握了 ##,了解一点 )+ 的知识,就可以轻松地看懂本文。
编程深入浅出静态链接库
对静态链接库的讲解不是本文的重点,但是在具体讲解 之前,通过一个静态链接库的例子可以快速地
帮助我们建立“库”的概念。
/
图 建立一个静态链接库
如图 ,在 ##. 中 一个名称为 0& 的 && 工程单击此处下载本工程附件,并新
建 % 和 $$ 两个文件,% 和 $$ 的源代码如下:
11文件:%
233 "45
23 "45
&66&&7&8 11声明为 编译、连接方式的外部函数
23
11文件:$$
2!6%6
&&7&
9
///&!#8
:
编译这个工程就得到了一个 文件,这个文件就是一个函数库,它提供了 的功能。将头文件
和 文件提交给用户后,用户就可以直接使用其中的 函数了。
标准 0!. 中的 库函数我们用来的 3、$&3、$、&$ 等就来自这种静态库。
////下面来看看怎么使用这个库,在 0& 工程所在的工作区内 一个 工程。 工程仅包含
一个 $$ 文件,它演示了静态链接库的调用方法,其源代码如下:
2!
2!6;%6
2$(&76;;!(;;0&6 11指定与静态库一起连接
&&(7%<(=>?
9
///$&36#'@A677'8
:
静态链接库的调用就是这么简单,或许我们每天都在用,可是我们没有明白这个概念。代码中
2$(&76;;!(;;0&6的意思是指本文件生成的B 文件应与 0& 一起连
接。
如果不用2$(& 指定,则可以直接在 ##中设置,如图 ,依次选择
&、$&、&、3 菜单或选项,填入库文件路径。图 中加红圈的部分为我们添加
的 0& 文件的路径。
/
图 在 中设置库文件路径
这个静态链接库的例子至少让我们明白了库函数是怎么回事,它们是哪来的。我们现在有下列模糊认
识了:
库不是个怪物,编写库的程序和编写一般的程序区别不大,只是库不能单独执行;
库提供一些可以给别的程序调用的东东,别的程序要调用它必须以某种方式指明它要调用之。
以上从静态链接库分析而得到的对库的懵懂概念可以直接引申到动态链接库中,动态链接库与静态链
接库在编写和调用上的不同体现在库的外部接口定义及调用方式略有差异。
静态库
"
在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其他模块组合起来创
建最终的可执行文件(-C- 文件)。
当发布产品时,只需要发布这个可执行文件,并不需要发布被使用的静态库。
动态库
引入库()文件和一个 ()文件。
对一个 来说,其引入库文件()包含该 导出的函数和变量的符号名,而 文件包含该
实际的函数和数据。
在使用动态库的情况下,在编译链接可执行文件时,只需要链接该 的引入库文件,该 中的函数
代码和数据并不复制到可执行文件中,直到可执行程序运行时,才去加载所需的 ,将该 映射到
进程的地址空间中,然后访问 中导出的函数。在发布产品时,除了发布可执行文件以外,同时还要
发布该程序将要调用的动态链接库。
使用动态链接库的好处
、可以采用多种编程语言来编写Q?没试过
、增强产品的功能所谓的软件升级?好像是的,开发新的 ,取代原有的
'、提供二次开发的平台可以利用该 调用其中实现的功能,编写符合自己业务需要的产品,从而实现
二次开发
D、简化项目管理各 同时开发。
E、可以节省磁盘空间和内存
、有助于资源的共享(在实际工作中,可以编写一个纯资源的动态链接库供其他应用程序访问。
F、有助于实现应用程序的本地化
动态链接库的加载:
、隐式链接
、显式加载
新建 ' 类型的工程
&&7&
9
/&!#8
:
&!&&&7&
9
/&!8
:
应用程序如果想要访问某个 中的函数7那么该函数必须是已经被导出的函数
G!$
G!$$&<
为了让 导出一些函数7需要在每一个将要被导出的函数前面添加标识符H4$$&
4$$&&&7&
9
/&!#8
:
4$$&&!&&&7&
9
/&!8
:
新建基于对话框的 )+ 应用程序 0&
B&;I&&(GGJB&1!G
搜索动态链接库的顺序:
、程序的执行目录QQ0&;!(
、当前目录
'、系统目录依次是 H; **0;&'7H; **0;&7H; **0
D、$&% 环境变量中所列出的路径
!$$&0&
剩余42页未读,继续阅读
hjt_waves
- 粉丝: 1
- 资源: 118
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0