# 慕名下载了侯捷先生的 深入浅出 MFC 2/e, 虽然才看到开头, 还是忍不住先瞎扯一番, 权当是读书笔记了.
貌似从知道有 DLL (Dynamic Link Library) 文件起, 大家就很神秘地管它叫 “动态链接库”, 那时我啥都不懂, 听着听着也就麻木了. 最近这一看才醒悟, 其实这所谓 “动态” 是相对于 “静态” 来说的, 而 “静态链接” 基本上就是我们熟知的 “编译 - 连接” 中的后者. 于是我有一点不明白: 如此一来, 岂不是应该叫 “动态连接库”? 大概是翻译习惯不同吧, Google Trend 到的 “动态链接库,动态连接库“, “链接代码,连接代码” 比例正好相反, Orz…
其实不管是 “连接” 还是 “链接”, 从这一名称的由来我们就可以对 DLL 究竟是何方神圣有些眉目. 就我粗浅的理解来说, “连接” 这一动作是将源程序对应的 OBJ 文件与模块/资源等等 “揉” 到一块儿, 产出最终的 EXE 文件. 而 “动态链接” 即不将某些模块/资源之类 “揉” 入最终 EXE, 而是留一个线索说 “要货的话就到某某某处来”. 借用 C 中指针的概念, “静态链接” 即在 EXE 中加入模块甲本身, 而 “动态链接” 即在 EXE 中加入指向模块甲的指针.
使用 DLL 有几个很明显的好处:
- 方便系统维护/升级等
- 缩小可执行文件体积
- 共享模块/资源等
在查看到底 DLL 文件在 Windows 中叫什么的时候才发现, 原来在 Windows 中 DLL 既不叫 “动态链接库” 也不叫 “动态连接库”, 而是叫 “应用程序扩展”, 我晕. 不过也是, 还省得解释前面这一大摊子话.
上过 9X 系列贼船的童鞋们一定对因 Kernel32.dll 出错而导致 Explorer 崩溃记忆犹新吧. 没错, Kernel32.dll 不仅是个动态链接库, 还是 Windows 三大模块之一, 主管 Windows 系统内核. 另两位是分管图形接口的 GDI32.dll 和分管用户接口的 User32.dll. 三者按出场顺序, 后者运行需要前者. 于是我们看到很奇怪的现象: 用户接口竟然需要图形接口支持. 这是为什么呢? 额… 表问我, 问比尔大叔去… (貌似在 Vista 里已经有点要翻身的意思了, 鬼知道呢)
最后, Windows 编程时几乎都需要引入 windows.h 这个头文件, 它包含了 Windows 三大模块所提供的 API 等资源. 这样倒也省时省力, 而其它要用的动态链接库, 即使是系统 DLL 也需要手动引入.
# 结束之余扯点其它的. 由于侯先生开放的 深入浅出 MFC 2/e 是繁体版, 有生以来第一次认真地看这么大规模的繁体字文章, 偶尔一两个繁简差别很大的非词字还得 Google. 感觉其实繁体字虽然顾名思义地复杂, 但确实优美, 比简体显得有内涵 :)
{ 1 } Comments
最近在学候先生的深入浅出MFC。看了老兄的文章,头一次感觉自己看书不是那么认真,拜读了,谢谢
{ 1 } Trackback
[...] # 继续是侯先生 深入浅出 MFC 2/e 的读书笔记. 上回扯到 DLL 文件. [...]
Post a Comment