关于DLL的调用序列

DLL的加载分为 显示和隐式 调用

 

1 隐式调用是包含DLL导出LIB 然后调用其中的导出函数

才会发生隐式调用 也就是说如果没有发生调用 即使包含也不会发生隐式调用。

 

链接阶段,动态链接库的LIB 就相当于一个编译单元(obj),不过他不是他自己的代码嵌入到EXE中 而是在把需要调用函数信息(包括在那个DLL中)写入到EXE的导入表中。注 个人理解  不一定太对 不可全信

程序DLL 和EXE 的格式差不多 

都有个导入表和导出表。

当程序初始化的时候 会先对导入表中的内容进行导入 这个发生在 主函数(main  OR winmain)前

初始化完毕后,如果这里导入的DLL很多的话 程序初始化将无法忍受(书上说的) 在进入主函数。

这里引入的DLL的动作是递归调用, A.EXE 导入表中有 B.DLL   当A运行的时候先隐式载入B.DLL 如果B.DLL中导入表中有C.DLL的话 在B.DLL的初始化过程中又导入C.DLL 如果C.DLL导表中还有的其他DLL话讲继续下去

所以这个顺序是 XX.DLL-->C.DLL—>B.DLL—>A.EXE

 

突然想到个有意思的问题 去实践了一下

如果是个三角的话会怎么样

                   B.DLL调用C.DLL C.DLL调用A.DLL  A.DLL调用B.DLL 会怎么样 典型的三角恋啊

                  但是结果很失望啊 木有戏可看啊

                 A—>C—>B

当我在调试的时候 B里的全局对象构造的时候 发现模块已经全部载入了 这个。。。

 

这个还需要研究啊  好好看看核心编程

 

最近效率不高啊 

STL的代码还木有敲

二叉树旋转还有旋转 数据结构其他的结构还木有敲

准备每天翻译的东西还木有开始

脚本语言木有看

哎   

posted on 2011-08-02 23:52  我要穿越  阅读(268)  评论(0编辑  收藏  举报

导航