使用动态链接库的理由:
1. 他们扩展了应用程序的特性
2. 简化了项目管理
3. 有助于节省内存
4. 促进资源共享
5. 促进本地化
6. 提供特殊目的。
在创建dll的时候,我们必须给连接器指定dll开关,这个开关会使得连接器在生成dll文件影响中保存一些与可执行文件略微不同的信息,这样操作系统的加载程序能够将该文件识别为dll,而不会将它识别为应用程序。
应用程序使用dll函数之前,必须将该dll的文件映像到调用进程的地址空间中。有两种方式:一种是隐式载入链接,另外一种是显示运行时链接。
一旦dll文件影响到一个进程的地址空间后,进程的所有线程就可以调用dll中的函数了。事实上,该dll几乎完全丧失了dll的身份,进程中的线程来说,该dll中的代码和数据就像一些附加的代码和数据,碰巧放到进程的地址空间中了。当线程调用dll的一个函数时,该函数会在程栈中取得传给他的参数,并使用线程栈存放他需要的局部变量。Dll中函数创建的任何对象都为调用线程或者调用进程所拥有-------dll绝对不会拥有任何对象。
如果运行同一个可执行文件的多个实例,这些实例就不会共享可执行文件中的全局变量和静态变量。Windows通过使用写时复制机制,保证这一点。Dll中的全局变量和局部变量也是通过完全相同的方法处理的。当一个进程将一个dll文件映射到自己的地址空间中时,系统也会为全局变量和静态变量创建新的实例。