WIN32汇编语言教程:第02章 准备编程环境 · 2.3 创建资源
2.3.1 资源编译器的使用
资源编译器用来把资源脚本文件(*.rc)编译成资源文件(*.res),MASM32软件包中使用的是Visual C++附带的Rc.exe程序,TASM软件包中使用的是BRC32.exe或BRCC32.exe,两者的用法都比较简单,它们有相同的命令行语法:
Rc或BRC32 [选项] 资源脚本文件名
Rc和BRC32在使用中没有必需的选项,不像汇编编译器一样必须使用一些关键的选项。如果编译成功,就会产生以res为扩展名的资源文件,两者生成的资源文件的格式是一样的。
资源文件编写是PE开发的标准步骤,不同的语言使用的资源编译器以及生成的 .res文件格式都是一样的,没有汇编格式的资源文件和C格式的资源文件之分,所以汇编开发包中的资源编译器实际上就是C开发包中的资源编译器。由于C语言的使用远比汇编广泛,所以资源脚本文件的语法是C格式的,如等值定义语句使用#define而不是汇编常用的equ,注释使用“//”而不是“;”,头文件习惯使用 .h扩展名而不是 .inc,参数定义有“或”操作时使用“|”操作符而不是汇编的“or”操作符等,这些在使用中必须注意,否则会引起语法错误。
两种资源编译器在使用中稍微有所区别,BRC32.exe内部可以解释Windows的一些预定义值,所以不用附带头文件,只有遇到最新的预定义时才需要头文件,而Rc并没有这个功能,所以在脚本文件中必须把头文件Resource.h包括进去。
2.3.2 所见即所得的资源编辑器
资源脚本文件中一个典型的对话框定义是这样的:
DLG_MAIN DIALOG 0, 0, 176, 66 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "对话框模板" FONT 9, "宋体" { DEFPUSHBUTTON "退出",IDOK,120,46,50,14 CONTROL"",-1,"Static",SS_ETCHEDHORZ|WS_CHILD|WS_VISIBLE,7,38,164,2 }
第一句定义了对话框的左上角坐标为(0,0),大小为(176,66),中间的DEFPUSHBUTTON定义了一个位置为(120,46),大小为(50,14)的按钮,看到这些定义后脑袋里要出现一个正确的对话框是很不容易的,只能在纸上打格子画出来后才能明白它的模样,所以直接用文本编辑器书写资源脚本文件有诸多不便,就像谁都不会用db语句一个个像素地定义bmp位图一样,写资源脚本同样需要像图形编辑软件一样所见即所得的工具。Borland公司的Resource Workshop和VC环境内带的资源编辑器就是这样的工具。
1. Resource Workshop资源编辑器
Resource Workshop是Borland公司出品的资源编辑器,它是当做Borland C++的一个组成部分发布的,并不是一个单独的产品,但由于它使用方便,应用一直比较广泛,于是有人将它单独分离出来做成一个软件包下载,Resource Workshop的初始版本不是双字节版,所以无法支持中文,在编辑的时候输入中文,存盘后会变成乱码,非常不便,还是有“好事者”将它修改成了双字节版供人下载,在网上搜寻下载的时候要注意版本区别。
同样是上面举例的对话框,在Resource Workshop中的编辑界面如图2.3所示,是不是形象多了?Resource Workshop不但支持资源脚本文件*.rc,同时支持资源文件*.res,读者可以用它打开*.res文件,编辑后存为*.rc文件,同时也可以直接用它编辑*.rc文件且生成*.res文件,这样就可以免去用资源编译器编译脚本文件的步骤。
奇怪的是,BRCC32.exe不需要预定义头文件的支持,而同是Borland公司的Resource Workshop却没有内置窗口风格等定义值,所以在使用中需要Resource.h头文件的支持,并且,Resource.h文件必须和 .rc文件在同一个目录中,所以用它来编辑资源脚本文件的时候要注意拷贝一份Resource.h文件,如果直接编辑资源文件*.res则不需要头文件。
Resource Workshop的缺点是版本比较老,毕竟它是随早期的Borland C++发布的,所以它不支持一些新的特征,如窗口的扩展风格等,如果在 .rc文件的定义中用到这些风格,Resource Workshop会提示不认识这些关键字,如果用它打开含扩展风格对话框的 .res文件,则会提示一个Unexpected file format错误。
图2.3 Resource Workshop的使用界面
2. 用Visual C++编辑资源
Visual C++本身是一个很大的软件包,里面集成了资源编辑功能,它也是所见即所得的编辑工具,并且支持最新的资源特征,如最新的对话框风格和一些新的控件等,同时它是双字节版本,不必担心乱码问题,Visual C++也支持编辑脚本文件*.rc和资源文件*.res,可以在两者之间互相转换。单单从功能方面考虑,用Visual C++来编辑资源是一个很好的选择。Visual C++的资源编辑界面如图2.4所示。
使用Visual C++做资源编辑器的一个显著缺点就是它的规模,资源编辑的功能是集成在IDE环境中的,要使用它就要安装整个软件包,至少需要几百MB的空间!而Resource Workshop只有几MB,MASM32软件包也只有不到10MB,为了一个资源编辑功能用去几百MB的空间似乎有点好笑。
另外,用Visual C++生成的.rc文件总是包含了很多VC自己的头文件,如果将它们去掉,下次就无法再用VC打开;如果不去掉这些多余的信息,那么用Rc.exe编译的时候就要把所有需要的头文件拷贝过来,将源程序和别人交流的时候,别人要编译这个资源脚本也必须到VC中去找到这些头文件。
但Visual C++毕竟是个功能强大的工具,建议读者还是使用Visual C++来编辑资源,存盘的时候直接存为*.res文件,这样可以省去编译资源的步骤。到最后调试完成的时候或者需要交流的时候,可以保存一份 .rc文件并将文件中VC使用的多余内容去掉,整理成Rc.exe可以编译的格式。
图2.4 Visual C++的资源编辑界面
上页:第02章 准备编程环境 · 2.2 编译器和链接器(3) 下页:第02章 准备编程环境 · 2.4 make工具的用法(1)