posts - 16, comments - 0, trackbacks - 0, articles - 0

Danamic Link Library

Posted on 2008-11-05 14:55 dengbo 阅读(256) 评论(0)  编辑 收藏 引用
 

DLL文件(Dynamic Linkable Library 动态链文件),是一不能独运行的文件,它允程序共享行特殊任所必需的代和其他

  比大的用程序都由很多模块组成,些模完成相独立的功能,它彼此作来完成整个件系的工作。可能存在一些模的功能较为通用,在构造其它件系统时仍会被使用。在构造件系统时,如果将所有模的源代都静态编译到整个用程序 EXE 文件中,会生一些问题:一个缺点是增加了用程序的大小,它会占用更多的磁,程序运行也会消耗大的内存空,造成系统资源的浪;另一个缺点是,在写大的 EXE 程序,在次修改重建都必须调编译所有源代,增加了编译过程的复杂性,也不利于段性的测试

  Windows 平台上提供了一完全不同的有效的程和运行境,你可以将独立的程序模块创为较小的 DLL 文件,并可们单编译测试。在运行,只有当 EXE 程序确 DLL 的情况下,系才会将它到内存空中。这种方式不减少了 EXE 文件的大小和内存空的需求,而且使 DLL 可以同被多个用程序使用。Windows 自己就将一些主要的系功能以 DLL 的形式实现

  一般来DLL 是一文件,以.dll.DRV.FON.SYS 多以 .EXE 为扩展名的系文件都可以是 DLL。它由全局数据、服函数和成,在运行被系程的虚中,成为调程的一部分。如果与其它 DLL 没有冲突,文件通常映射到程虚的同一地址上。DLL 中包含各种导出函数,用于向外界提供服DLL 可以有自己的数据段,但没有自己的堆,使用与用它的用程序相同的堆模式;一个 DLL 在内存中只有一个例;DLL 实现了代封装性;DLL 制与具体的言及编译器无

  在 Win32 境中,程都制了自己的/写全局量。如果想要与其它程共享内存,必使用内存映射文件或者声明一个共享数据段。DLL 需要的堆内存都是从运行程的堆中分配出来的。Windows 在加 DLL 块时程函数用与 DLL 文件的出函数相匹配。Windows 操作系统对 DLL 的操作仅仅是把 DLL 映射到需要它的程的虚地址空里去。DLL 函数中的代建的任何象(包括量)都归调用它的线程或程所有。

  用方式:

  1、静态调用方式:由编译完成 DLL 的加用程序 DLL 编码(如有其它程序使用 DLL Windows DLL 记录1,直到所有相程序都对该 DLL 的使用放它,简单实用,但不灵活,只能足一般要求。

  式的用:需要把动态连库时产生的 .LIB 文件加入到用程序的工程中,想使用 DLL 中的函数,只须说明一下。用不需要 LoadLibrary() FreeLibrary()。程序在建立一个 DLL 文件接程序会自生成一个与之对应 LIB 入文件。文件包含了一个 DLL 出函数的符号名和可标识号,但是并不含有实际的代LIB 文件作 DLL 的替代文件被编译用程序目中。

  当程序态链接方式编译生成用程序用程序中的用函数与 LIB 文件中出符号相匹配,些符号标识入到生成的 EXE 文件中。LIB 文件中也包含了对应 DL L文件名(但不是完全的路径名),接程序将其存 EXE 文件内部。

  当用程序运行程中需要加 DLL 文件Windows 根据些信息发现并加 DLL,然后通符号名或标识实现对 DLL 函数的动态链接。所有被用程序用的 DLL 文件都会在用程序 EXE 文件加载时被加在到内存中。可行程序接到一个包含 DLL 出函数信息的文件(.LIB文件)。操作系在加使用可行程序 DLL。可程序直接通函数名 DLL 出函数,用方法和程序内部其 它的函数是一的。

  2动态调用方式:是由程者用 API 函数加和卸 DLL 来达到 DLL 的目的,使用上较复杂,但能更加有效地使用内存,是制大型用程序的重要方式。

  式的用:

  是指在用程序中用 LoadLibrary MFC 提供的 AfxLoadLibrary 式的将自己所做的动态连库调进来,动态连的文件名即是上面两个函数的参数,再用 GetProcAddress() 取想要引入的函数。自此,你就可以象使用如同本用程序自定的函数一用此引入函数了。在用程序退出之前,应该 FreeLibrary MFC 提供的 AfxFreeLibrary 动态连。直接 Win32 LoadLibary 函数,并指定 DLL 的路径作参数。LoadLibary 返回 HINSTANCE 参数,用程序在 GetProcAddress 函数使用一参数。GetProcAddress 函数将符号名或标识转换为 DLL 内部的地址。程序可以决定 DLL 文件何不加接在运行决定加哪个 DLL 文件。使用 DLL 的程序在使用之前必LoadLibrary)加DLL从而得到一个DLL的句柄,然后 GetProcAddress 函数得到出函数的指,在退出之前必DLL(FreeLibrary)

  正因DLL 有占用内存小,好编辑等的特点有很多电脑病毒都是DLL格式文件。但不能独运行。

  动态链通常都不能直接运行,也不能接收消息。它是一些独立的文件,其中包含能被可行程序或其它DLL用来完成某工作的函数。只有在其它模块调动态链中的函数,它才发挥作用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理