分类：电脑/网络
问题：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 和他的常规结构、基本感念就可以了，这亮点很重要。