第7章 Win32编程环境.pdf





《第7章 Win32编程环境.pdf》由会员分享,可在线阅读,更多相关《第7章 Win32编程环境.pdf(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 第 7 章 Win32 编程环境 使用汇编语言来开发Win32程序的软件包有Microsoft的MASM系列、Borland的TASM系列等。本章首先介绍了 MASM32 软件包的组成及安装方法;然后通过 MASM32 软件包自带的例子,介绍集成环境 QEDITOR 的使用;最后介绍生成 Win32 可执行文件的步骤和方法。7.1 MASM32 软件包简介 1.MASM 系列编译器介绍 MASM 是 Microsoft 公司推出的汇编编译器。它有众多版本,高版本和低版本的语法和功能相差很多,向下兼容性也不好。低版本的 MASM 固然无法编译高版本的源程序,但是,高版本的 MASM 也可能无法
2、正常编译低版本的源程序。在使用 MASM 系列编译器时,一定要注意所使用的版本。在前 6 章中,介绍 DOS 环境下的汇编编程,使用的是 MASM 6.00。从本章开始,介绍如何编制 Win32 编程,其使用的是 MASM 6.14 编译器。下面介绍一些重要的 MASM 版本及其关键演变历程。1989 年 Microsoft 推出了 MASM 5.10B,它是传统的 DOS 汇编编译器中最完善的版本,运行稳定、速度快。该版本支持 80386 处理器指令,允许将段定义伪指令简化为“.code”与“.data”之类的形式,同时增加了对“”标号的支持。这样,程序员可以不再为标号的起名花掉很多时间。1
3、992 年 Microsoft 发布了 MASM 6.00。编译器使用扩展内存,编译更大的文件,这时,可执行文件名相应从 MASM.EXE 改为 ML.EXE。从该版本开始,可以在命令行上使用“*.ASM”,以便同时编译多个源文件。最大的改进之一是开始支持“.IF/.ENDIF”等高级语法,使得复杂的条件分支语句的编写和用高级语言编写一样简单,可以在几千行代码中不定义一个标号;另外,增加了 invoke 伪指令,简化了带参数的子程序调用。这两个改进使汇编代码的风格越来越像 C,可读性和可维护性提高了很多。MASM 6.11 于1993 年11 月发布,从该版本开始,支持Win32 编程,支持W
4、indows NT、Pentium 指令。MASM 6.14 是一个很完善的版本,它在.XMM 中增加了对 Pentium III 的 SIMD 指令集的支持。不同版本 MASM 产生的目标文件(.OBJ)格式不同。在 DOS 和 Win16 时期,Microsoft 使用的目标文件格式为 OMF(Intel Object Module Format)格式,到了 Win32 时期(从 MASM 6.11 版本开始),改用为 COFF(Common Object File Format)格式,原因之一是 COFF 格式更像最终的 PE 文件,在链接时可以做更少的处理。用 Microsoft 的产
5、品编写 Win32 程序,不管是使用 VC 还是 MASM,都必须使用 COFF 格式,因为 Microsoft 的 32 位的 Link 只支持将 COFF 格式的 OBJ 文件链接成 PE 文件,另外所有的导入库等支持文件的格式也全部是 COFF 格式的。2.MASM32 软件包 MASM32 软件包是不同工具软件的大集合,它包含如下工具软件:(1)汇编编译器,来源于 MASM 软件包中的 ML.EXE;100 (2)32 位链接器,来源于 Microsoft Visual Studio 的 LINK.EXE;(3)资源编译器,同样来源于 Microsoft Visual Studio 的
6、 RC.EXE。同时也包含了 Microsoft Visual Studio 中的其他一些工具,如 LIB.EXE 和 DUMPPE.EXE 等,所有的工具都适合于 Win32 编程的版本。(4)导入库,包括详尽的头文件。导入库文件取自 Visual C+的导入库。(5)头文件,包括详尽的头文件。规模庞大的头文件是发布者整理出来的。(6)W32 程序例子,涉及 Win32 汇编的很多方面,收集自世界各地 Win32 汇编爱好者发布的源程序。(7)集成开发环境,为了使工具包更实用,发布者还为它编写了一个简单的集成开发环境(Integrated Develop Environment,IDE)QE
7、DITOR.EXE。该 IDE 环境使用只是一个简单的文本编辑器加上用户可以自行设置菜单的 Shell。在开发软件时完全可以不用该集成开发环境。MASM32 软件包完全是为了用汇编语言编写专业大型程序而开发的。它的发布者 Steve Hutchesson 做了所有汇编程序员都想做却又在庞大的工程量前止步的工作,如收集合适的工具软件,收集导入库,整理出完整的头文件,收集例子文件,写帮助文档,等等。本书使用的是MASM32V8版本,在光盘上有一个MASM32V8.EXE。和早期的MASM32版本相比,使用的编译器、链接器等可执行文件并没有什么改变,不同的是在头文件中增补了一些数据结构定义,增加了不
8、少例子程序。最新版本的 MASM32 软件包可以在发布者的主页 http:/ 中下载。MASM32 是一个免费的软件包,但其中的不同部分如编译器和例子程序等可能属于不同的公司和个人,使用时需要注意其版权声明。7.2 MASM32 软件包安装 双击 MAMS32V8.EXE,出现如图 7.1 所示的 MASM32 的安装界面。图 7.1 MASM32 的安装界面 首先,选择将 MASM32 安装在哪一个驱动器上。例如,我们要将其安装在 D:盘上,单击101 “DRIVE D:”所在的行,该行上将出现蓝色亮条。这时,安装的目标位置将是 D:masm32目录。之后,单击“Install MASM32
9、”,出现如图 7.2 所示的界面。图 7.2 MASM32 的安装提示 弹出的对话框提示安装过程中的一些信息将显示在标题栏上。单击“确定”,开始安装。之后,我们可以看到标题栏上不断变化的提示信息。该过程要持续一会,请耐心等待,直到出现如图 7.3 所示的界面。图 7.3 建立各种库 按任意键,开始建立各种库文件。安装完成后,有一个提示信息框,如图 7.4 所示。单击其中的“确定”即可。102 图 7.4 安装完成后的提示 图 7.4 提示信息中,一是指明在安装后的目录下(如 D:masm32)有 README.HTM,该文件中有很多帮助信息;二是使用 QEDITOR.EXE 验证系统是否成功安
10、装。7.3 节中将简单介绍 QEDITOR 的使用方法。在安装完成后,我们可以浏览一下 MASM32 下各目录的内容,熟悉以后经常要用到的一些重要文件的位置。masm32bin 可执行文件目录,里面包括 ML.EXE、LINK.EXE、LIB.EXE 等。在 bin目录下,还有多个批处理文件(*.BAT),这些文件可以使用 UltraEdit 等工具打开。另外还有图像编辑工具 IMAGEDIT.EXE、资源编译器 RC.EXE、从资源文件到目标文件的转换工具 CVTRES.EXE 等。masm32include 所有头文件的目录,WINDOWS.INC 为数据结构和预定义值的定义文件,RESO
11、URCE.H 为资源文件的头文件,其他.INC 文件为对应 DLL 文件中的 API 函数声明文件;masm32lib 所有的导入库文件,每个.LIB 文件是对应 DLL 文件的导入库;masm32help 帮助文件目录;masm32m32lib 一些常用 C 子程序的汇编实现源程序,如熟悉的 STDIN 和 STDOUT 等,有一定的参考价值;其他目录主要为例子和可用可不用的小工具,例子中广泛收集自网上不同作者的作品,很有参考价值。在众多目录中,最为关键的是 bin、include 和 lib,有了这三个目录中的内容,就可以进行 Win32 汇编编程了,其他目录中的文件仅起辅助作用。7.3
12、使用 QEDITOR 7.3.1 首次使用 QEDITOR 本节我们使用 MASM32 软件包自带的例子,了解 Windows 程序编辑、链接、运行的过程。双击 D:masm32 目录下的 QEDITOR.EXE,出现如图 7.5 所示的界面。103 图 7.5 QEDITOR 的运行界面 单击“File/Open”,出现“Open File”对话框,如图 7.6 所示。图 7.6 打开文件对话框 选择 EXAMPLE1 3DFRAMES 3DFRAMES.ASM,也可出现图 7.6 所示的界面。单击“打开”,将出现 3DFRAMES.ASM 程序,在标题栏上也有该文件的路径。执行“Proje
13、ct/Build All”,如图 7.7 所示,将对资源脚本文件、汇编源程序进行编译,之后执行链接操作,出现如图 7.8 所示的界面。在图 7.8 所示的提示信息中,可以看到“Creating rsrc.RES”,即由资源脚本文件 RSRC.RC生成资源文件 rsrc.RES;可以看到编译器的版本信息“Assembler Version 6.14”,还可以看到“Assembling D:masm32 EXAMPLE13DFRAMES3DFRAMES.asm”,即对源程序进行了汇编。之后,有增量式链接器的版本“Incremental Linker Version 5.12”。最后,生成了 3D
14、FRAMES.EXE 文件。104 图 7.7 编译、链接程序 图 7.8 编译、链接后的提示信息 在 7.8 所示的界面中,按任意键返回到 QEDITOR 界面。105 单击“Project/Run Program”,出现程序 3DFRAMES.EXE 的运行界面,如图 7.9 所示。图 7.9 3DFRAMES.EXE 的运行界面 该程序具有菜单项 File、Help,还有三个按钮 Save、Cancel、Help。风格与常见的 Windows程序一样。单击 Help 菜单下的 About,会出现一个消息框。单击 File 菜单下的 Exit,会出现一个确认退出的消息框。该程序仅仅只是为了
15、显示一个有立体效果的界面而编制的,各按钮并没有对应什么功能。7.3.2 QEDITOR 揭密 打开 D:masm32 目录下的 MENUS.INI,可看到如下信息。&Project Compile&Resource File,MASM32BINBres.bat b&Assemble ASM file,MASM32BINAssmbl.bat b-&Link OBJ File,MASM32BINLnk.bat b Assemble&Link,MASM32BINBuild.bat b&Build All,MASM32BINBldall.bat b Run&Makeit.bat,makeit.bat-
16、Console Link&OBJ File,MASM32BINLnkc.bat b&Console Assemble&Link,MASM32BINBuildc.bat b Console Build&All,MASM32BINBldallc.bat b-&Run Program,b.exe&Tools 106&Project即菜单 Project,&P 表示字母 P 下有下划线。在&Project下的行是菜单项及单击菜单项时执行的命令及相应参数,前两者之间以逗号分隔。Project 包括的菜单项如下:Compile Resource File Assemble ASM file-Link OB
17、J File 单击某一个菜单项,执行的是菜单项右边的命令。例如,单击“Build All”,执行的是MASM32BIN 目录下的一个批处理文件BLDALL.BAT,它有一个参数b,即为当前文件名。通过修改 MENUS.INI,仿照已有的菜单,可以编写自己的菜单。下面分析批处理文件 BLDALL.BAT 的内容。使用一个文本编辑器打开 BLDALL.BAT(可以就使用 QEDITOR,也可以使用 UltraEdit 等)。其内容如下:echo off if not exist rsrc.rc goto over1 masm32binrc/v rsrc.rc masm32bincvtres/mac
18、hine:ix86 rsrc.res:over1 if exist%1.obj del%1.obj if exist%1.exe del%1.exe masm32binml/c/coff%1.asm if errorlevel 1 goto errasm if not exist rsrc.obj goto nores masm32binLink/SUBSYSTEM:WINDOWS%1.obj rsrc.obj if errorlevel 1 goto errlink dir%1.*goto TheEnd:nores masm32binLink/SUBSYSTEM:WINDOWS%1.obj
19、if errorlevel 1 goto errlink dir%1.*goto TheEnd:errlink echo _ echo Link error goto TheEnd:errasm echo _ echo Assembly Error goto TheEnd:TheEnd Pause BLDALL.BAT 是一个 DOS 的批处理文件。首先“echo off”,即可在屏幕上不显示执行107 的命令信息。如果文件 RSRC.RC 不存在,则转移到标号 over1 处;否则,使用 RC.EXE 对资源脚本文件 RSRC.RC 进行编译,生成资源文件“RSRC.RES”文件,之后使用
20、CVTRES.EXE 将RSRC.RES 转换成 RSRC.OBJ。在资源脚本编译后,也执行到 over1 处。从这一小段程序可以看到,它对资源文件进行编译,并且将资源脚本的名称固定成了 RSRC.RC。在 MASM32软件包所带的例子中,绝大部分使用的是 RSRC.RC。实际上,资源脚本完全可以使用其它名称,只是该处理程序将其写死罢了。例如,若将资源脚本文件命名为 3DFRAMES_RC.RC,则可以将批处理文件中的 RSRC.RC 替换为1_RC.RC。当然相应的 RSRC.RES 替换为%1_RC.RES,RSRC.OBJ 替换成%1_RC.OBJ。在 over1 处,判断“%1.obj
21、”和“1.exe”是否存在,若存在,则删除它们。“1”就是在 BLDALL.BAT 后面带的第一个参数,实际上就是在 QEDITOR 中打开的文件名(不含扩展名)。紧接着,执行“masm32binml/c/coff%1.asm”,即对文件进行编译。采用的编译器为 masm32bin 目录下的 ml。有关 ml 的使用在 7.4 节介绍。如果编译有错误,将转到标号“errasm”处,显示出错提示。在编译无错误的情况下,若有资源文件,则执行:masm32binLink/SUBSYSTEM:WINDOWS%1.obj rsrc.obj 否则执行:masm32binLink/SUBSYSTEM:WIN
22、DOWS%1.obj 该步执行了链接操作。有关 Link 的使用,也将在 7.4 节介绍。如果链接有错误,转到标号“errlink”处。否则显示文件名等同参数 1 的文件,扩展名是任意的(dir%1.*)。最后的一条命令是 Pause,即暂停执行 DOS 批处文件的执行,等待用户按任意键。在按任意键后,继续执行 DOS 批处理程序。由于 Pause 之后无任何命令,批处理程序的执行也就结束了。此处写 Pause 的目的是让用户看清楚提示,否则一闪而过,也不知道编译、链接的状况。与上述批处理程序类似,同样可以根据自己的需求编写的批处理文件,定制自己的菜单。使用 QEDITOR,可以编辑汇编源程序
23、,也还可以用来编辑资源脚本文件。资源脚本文件是一个文本文件,描述了程序中使用的菜单、对话框、位图、字符串等,具体的资源描述文法在第 8 章介绍。在创建、编辑汇编源程序的时候,还可以使用系统提供的一些模板。例如,在 Templates就有创建一个对话框程序的模板(Dialog Application Template)等,在 Script 菜单下有汇编程序框架模板(ASM),也有提示消息框模板(MessageBox),等等。感兴趣的读者可以定制菜单,进一步扩充系统的功能。7.4 生成 Win32 程序的过程 生成一个可执行的 Windows 程序,大致要经过汇编源文件的编辑和编译、资源文件的编辑
24、和编译、链接等过程。下面将对程序的编辑、编译、链接中使用到的软件进行更详细的说明。108 7.4.1 汇编源文件和资源脚本的编辑 汇编源文件的编辑与 DOS 下写汇编源程序是一样的。使用文本编辑器(如 UltraEdit)就可以编写汇编源代码(*.ASM 文件)。和 DOS 程序不同的是,DOS 下的汇编源程序广泛地使用中断,而在 Win32 程序中,要大量使用 Win32 API,因此在 ASM 文件中要使用 include 语句包含相应的数据定义和函数声明头文件。Win32 汇编的头文件一般用“.INI”作扩展名,如 MASM32 软件包附带的 Windows.inc。Windows.in
25、c 中定义了 Win32 API 中很多参数和数据结构,其他的 INC 文件则是对应同名 DLL 中的 Win32 API 函数声明。Win32 程序的一个特点就是具有良好的用户界面,这些界面实际上是由大量资源所组成。Windows 程序中使用的资源包括:菜单、对话框、快捷键、字符串、版本信息和图标等。这些资源用一些文本描述,通常将它们放在一个脚本文件中,扩展名一般为“.RC”。不同类型的资源需要不同的描述信息,比较详细的语法将在第 8 章中介绍。资源脚本文件同样用到很多预定义值,所以软件包一般有资源头文件可用来导入源文件。MASM32 软件包中的资源头文件是 Resource.h。我们可以采
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 Win32编程环境 Win32 编程 环境

限制150内