zoukankan      html  css  js  c++  java
  • What is "dll"?

    下面这篇文章是我从别的地方转载过来的,看完觉得比较好,所以就做了个reshipment,好东西大家一起研究呵呵。为尊重别人的知识产权,事先声明一下! 

    什么是DLL呢?
    DLL(动态连接库),既然是动态,那么就是有静态连接库,我想如果这么说大家会更明白:
    也许有的人在DOS下编写过程序都明白这么一件事情,我写了一个程序,里面有一个功能就是把屏幕的内容翻转在转90°打印出来,那么我需要把整个程序写好放

    到我的所有代码中,但是如果我写另外一个程序的时候也有相通的功能,我可以

    调用以前的程序这个功能吗?当然是不可以的了,所以我就要重新的写一次,如

    果有5个需要调用这个功能的程序,我的这个功能函数需要20K的地方,那么我的

    硬盘就有80K的垃圾出现(20k*5 - 20k),这仅仅是一个函数,大家是否可以数

    清除WINDOWS如果这样来写,需要多少函数吗?你看看所有的按钮、滚动条、

    Listbox\Textbox\checkBox\窗体、打印对话框、颜色对话框、打开、保存、另存

    、字体对话框、文件的排列、拷贝、粘贴...... 这一切的一切是不是都需要在所

    有的程序中都要写出来呢?如果真的是这个样子,那么我们的windows应该按TB来

    计算了(1TB=1024GB),也许你说你的硬盘很大,那么他们还要在运行的时候占

    用相同大下的内容呢!所以发展出来了,动态连接库(dll)这个感念:

    动态连接,就是把这些相通的功能、函数都放到一种特殊形式的windwos可执行文

    件中(dll),生成一个DLL的时候,程序员需要写出,其中包含那些函数需由其

    他程序来访问。这个过程叫做对函数的“导出”
    创建windows程序的时候,专门的连接程序对程序的对象文件进行扫描,并生成一

    个列表,列出那些调用的函数在那个DLL那个位置,指定各个函数所在位置的过程

    叫做对函数的“导入”,当程序运行的时候,一旦要求用到执行文件内部没有的

    函数,windows就会自动装载动态连接库,使应用程序可以访问这些函数。此时,

    每个函数的地址都会解析出来,并且以动态的方式连接到程序里--这便是术语

    “动态连接”的由来。
    另外还有一个好处,就是当你更新你的这个函数的版本和功能的时候,静态连接

    所需要做的工作是多少(假设按windwos来说他有上千个这样的函数,一共有100

    多个程序来使用,那静态连接需要100000次的更新,动态连接只需要1000次)
    ,从而也节省了内存的空间。
    动态连接库不一定是DLL扩展名的,也可以是ocx、vbx、exe、drv 等等的
    大家可以发现在调用WIN32 api的时候里面都会有说明是来自于那个dll等宿主文

    件的
    现在我就在这里讲讲一些标准的dll用途:
    看下面这个API声明:
    Public Declare Function GetWindowsDirectory Lib "kernel32" Alias  

    "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long)  

    As Long
    看见kernel32了吗,其实这个就是kernel32.dll的名字,你可以在你的硬盘里找

    到他,这就是说GetWindowsDirectory这个函数是在kernel32.dll里面,他的别名

    是GetWindowsDirectoryA,()中是他的参数,有两个一个是字符型,一个是长

    整型,返回值也是长整型。lpBuffer -------  String,指定一个字串缓冲区,

    用于装载Windows目录名。除非是根目录,否则目录中不会有一个中止用的“\”

    字符nSize ----------  Long,lpBuffer字串的最大长度,返回值 为Long,复制

    到lpBuffer的一个字串的长度。如lpBuffer不够大,不能容下整个字串,就会返

    回lpBuffer要求的长度。零表示失败。
    这就是API声明的意义所在!
    DLL的说明
    KERNEL32.DLL ---- 低级内核函数。使用他可以完成内存管理、任务管理、

    资源控制等。
    USER32.DLL------于windows管理有关的函数。消息、菜单、光标、计时器

    、通信和其他大多数非现实函数都可以从这里找到
    GDI32.DLL-------图形设备接口库。于设备输出有关的函数:大多数绘图

    、显示场景、图元文件、坐标及其字体函数都可以从这梨找到。
    COMDLG32.DLL\LZ32.DLL\VERSION.DLL\---这都是提供一些附加函数的库,包

    括通用对话框、文件压缩、版本控制的支持。

    COMCTL32.DLL --------一个新的windows控件集合,比如TreeView和RichTextBox

    等等,最初这个好像是为了win95而制作的,但是现在也使用与NT下
    MAPI32.DLL---------提供了一套电子邮件的专用函数
    NETAPI32.DLL--------提供了一套访问和控制网络的函数
    ODBC32.DLL--------(不用我再说了吧)ODBC功能的DLL之一
    WINMM.DLL------(这可不是WINDOWS的MM)是多媒体控制访问函数集合

    windows api正在快速发展和变化,是你我任何单个人都追赶不上的速度发展,幸

    运的是我们不用掌握所有的windows API,只是掌握需要经常使用的WINDOWs api

    和他的常规结构、基本感念就可以了,这亮点很重要。
    关于win32 API看我发的《什么是win32 API》

    这两篇文章是我特意送给beijingfish和一些初学windows 编程的网友的,连夜敢制出来的,手都痛了!

  • 相关阅读:
    C语言超大数据相加计算整理
    pc端页面加载更多条信息(loading)
    web前端学习路线
    linux启动流程
    Computer Science: http://www.cs.odu.edu/~cs779/
    编程网站
    sublime-text 键绑定
    monokai-background
    .vimrc
    vim 正则表达式查找ip
  • 原文地址:https://www.cnblogs.com/buffer/p/1257551.html
Copyright © 2011-2022 走看看