zoukankan      html  css  js  c++  java
  • 动态链接库基本概念

    在 Windows中存在一种叫做DLL(Dynamic Linkable Library动态链接库)的文件。它可以提供一些应用程序可以导入的数据、函数和类。DLL文件平时驻留在磁盘中,只有当运行的应用程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间中。这种方式不仅可以减少了应用程序EXE文件的大小和对内存空间的需求,耐而且这些DLL模块可以同时被多个应用程序所共享,从而极大方便了应用程序的设计。

    以前曾经用库函数实现了代码共享。这样存在一些缺点:一个缺点是增加了应用程序的代码量,它会占用更多的磁盘空间,同时在程序运行时也会占用较大的内存空间,从而造成了系统资源的浪费;另一个缺点是,在编写大的EXE程序时,每次重建时都必须高速编译所有源代码。

    而DLL文件有以下为众所欢迎的特点:

    • 它是动态链接的,即平时它驻留在本地在计算机的硬盘中,只有当某应用程序确实要调用 这些DLL模块的情况下,系统才会将它们从磁盘上装载到内存空间中,因此它不会使应用程序的代码量加大。

    • 它是公用的, 即当它一旦被调入内存则在内存中它只有一份文件,而该文件可以被Windows应用程序所调用。

    • 当已经没有应用程序再需要调用它时,它会自动卸载以释放所占用的内存。

    • 它们扩展了应用程序的特性。

    • 它们可以用许多种编程语言来编写。

    • 它们简化了软件项目的管理。

    • 它们有助于资源的共享。

    • 它们有助于应用程序的本地化

    • 它们有助于解决平台差异。

    • 它们可以用于一些特殊的目的。


    动态链接库的组成

    DLL必须有一个类似main函数的入口函数。还应该包含外部应用程序可以调用的函数对象和资源等。

    1动态链接库的入口函数。

    MFC AppWizard编写DLL时,在一般的情况下它都会给程序员提供一个默认的DLL入口函数。

    BOOL WINAPI DllMain(

      HINSTANCE hinstDLL,  // handle to DLL module

      DWORD fdwReason,     // reason for calling function

      LPVOID lpvReserved   // reserved

    );

    第一个参数:是指向DLL本身的句柄;

    第二个参数:常被用来指明DLL被调用的原因;

    第三个参数:是系统所保留的参数;

    入口函数的主要作用就是在系统调用该DLL时,进行一些初始化工作。由于DLL的初始化工作常常出现如下四种情况。Windows定定义了与这4种相对应的常数。

    ul_reason_for_call参数的常数

    常数

    说明

    DLL_PROCESS_ATTACH

    进程被调用

    DLL_THREAD_ATTACH

    线程被调用

    DLL_PROCESS_DETACH

    进程被停止

    DLL_THREAD_DETACH

    线程被停止

    2导出函数和内部函数

    从上述可知道DLL函数主要是为外部应用程序提供可调用的函数,因此在DLL中必须定义一些函数。DLL中的函数如果是外部应用程序可以调用的。那么这种函数就叫做导出函数(Export Function)。相反,函数如果只是为在DLL内部调用的,那么这类函数就叫做内部函数(Internal Function)。导出函数到客户端叫做导入函数。

    本文地址:http://www.cnblogs.com/fangyukuan/archive/2010/06/20/1761430.html

     
    分类: Windows
  • 相关阅读:
    Angular相关UI框架的安装
    Visual Studio Code 编辑器常用插件
    Groovy特性
    Notification(Android)消息推送机制
    Sublime SVN插件使用方法 PS:翻出来的旧笔记,现在Sublime和svn用的都不多了
    Python基本语法练习笔记(一)
    首篇博文占坑
    apache2修改用户和组
    如何修改script.bin/script.fex
    perl的INC设置
  • 原文地址:https://www.cnblogs.com/bruce1992/p/14873442.html
Copyright © 2011-2022 走看看