网站大量收购闲置独家精品文档,联系QQ:2885784924

WINDOWS到LIN的UX的程序移植.pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
WINDOWS到LIN的UX的程序移植

摘要:动态链接库技术实现和设计程序常用的技术,在Windows 和Linux 系统中都有动态库的概念,采用动态 库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。但不同操作系统的 动态库由于格式不同,在需要不同操作系统调用时需要进行动态库程序移植。本文分析和比较了两种操作系统动 态库技术,并给出了把Visual C++编制的动态库移植到Linux 上的方法和经验。 1、引言 动态库 (Dynamic Link Library abbr,DLL)技术是程序设计中经常采用的技术。其目的减少程序的大小,节省 空间,提高效率,具有很高的灵活性。采用动态库技术对于升级软件版本更加容易。与静态库(Static Link Library) 不同,动态库里面的函数不是执行程序本身的一部分,而是根据执行需要按需载入,其执行代码可以同时在多个 程序中共享。 在Windows 和Linux 操作系统中,都可采用这种方式进行软件设计,但他们的调用方式以及程序编制方式不尽 相同。本文首先分析了在这两种操作系统中通常采用的动态库调用方法以及程序编制方式,然后分析比较了这两 种方式的不同之处,最后根据实际移植程序经验,介绍了把VC++编制的Windows 动态库移植到Linux 下的方法。 2、动态库技术 2.1Windows 动态库技术 动态链接库是实现Windows 应用程序共享资源、节省内存空间、提高使用效率的一个重要技术手段。常见的动 态库包含外部函数和资源,也有一些动态库只包含资源,如Windows 字体资源文件,称之为资源动态链接库。 通常动态库以.dll,.drv、.fon等作为后缀。相应的windows 静态库通常以.lib结尾,Windows 自己就把一些主要 的系统功能以动态库模块的形式实现。 Windows 动态库在运行时被系统加载到进程的虚拟空间中,使用从调用进程的虚拟地址空间分配的内存,成为调 用进程的一部分。DLL也只能被该进程的线程所访问。DLL 的句柄可以被调用进程使用;调用进程的句柄可以被 DLL使用。DLL模块中包含各种导出函数,用于向外界提供服务。DLL可以有自己的数据段,但没有自己的堆栈, 使用与调用它的应用程序相同的堆栈模式;一个DLL在内存中只有一个实例;DLL 实现了代码封装性;DLL 的 编制与具体的编程语言及编译器无关,可以通过DLL来实现混合语言编程。DLL 函数中的代码所创建的任何对 象 (包括变量)都归调用它的线程或进程所有。 根据调用方式的不同,对动态库的调用可分为静态调用方式和动态调用方式。 (1)静态调用,也称为隐式调用,由编译系统完成对DLL 的加载和应用程序结束时DLL卸载的编码 (Windows 系 统负责对DLL调用次数的计数),调用方式简单,能够满足通常的要求。通常采用的调用方式是把产生动态连接 库时产生的.LIB文件加入到应用程序的工程中,想使用DLL 中的函数时,只须在源文件中声明一下。 LIB文件 包含了每一个DLL 导出函数的符号名和可选择的标识号以及DLL文件名,不含有实际的代码。Lib文件包含的信 息进入到生成的应用程序中,被调用的DLL文件会在应用程序加载时同时加载在到内存中。 (2)动态调用,即显式调用方式,是由编程者用API 函数加载和卸载DLL来达到调用DLL 的目的,比较复杂,但 能更加有效地使用内存,是编制大型应用程序时的重要方式。在Windows 系统中,与动态库调用有关的函数包 括: ①LoadLibrary (或MFC 的AfxLoadLibrary),装载动态库。 ②GetProcAddress,获取要引入的函数,把符号名或标识号转换为DLL 内部地址。 ③FreeLibrary (或MFC 的AfxFreeLibrary),释放动态链接库。 在windows 中创建动态库也非常方便和简单。在Visual C++中,可以创建不用MFC而直接用C语言写的DLL 程序,也可以创建基于MFC类库的DLL程序。每一个DLL必须有一个入口点,在VC++中,DllMain是一个缺 省的入口函数。DllMain 负责初始化(Initialization)和结束(Termination)工作。动态库输出函数也有两种约定,分 别是基于调用约定和名字修饰约定。DLL程序定义的函数分为内部函数和导出函数,动态库导出的函数供其它程 序模块调用。通常可以有下面几种方法导出函数: ①采用模块定义文件的EXPORT 部分指定要输入的函数或者变量。 ②使用MFC提供的修饰符号_declspec(dllexport)。 ③以命令行方式,采用/EXPORT 命令行输出有关

文档评论(0)

liwenhua00 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档