一个win32程序的编译内容

程序员在编写一个Win32程序与编写一个32位控制台程序有些许不同。Win32程序除了代码逻辑需要程序编写外,还需要编写对应的资源文件。

一个windows图形化程序的编写过程如下:

编写代码和资源文件->通过编编译器转换成可链接的机器代码文件(.obj文件)、对应的资源文件(.res)->链接器将代码和对应的资源链接成可执行文件(.exe)。

资源文件内容包括:对话框、快捷键、菜单、字符串、版本信息和图形资源等。这些资源文件与"脚本"文件类似,它的拓展名一般为rc。其中不同用法定义了不同类型资源,资源脚本文件最后由资源编译器编译成资源文件(*.res)。

资源脚本同样需要很多预定义的内容,这些内容存放在Resource.h头文件。这就是为什么我们编写资源文件需要导入这样的头文件。

资源文件中,不同类型资源的记录方式是不同的。对话框资源只记录定义值,如对话框大小、位置等并非存储最终显示在屏幕上的像素。这些位置和大小信息只有在Windows最终解释后才会显示在屏幕上被绘画出像素:菜单、字符串、快捷键等由文本构成;图形资源则真正由像素组成,它们在资源脚本被定义为一个文件名,由资源编译器从磁盘文件导入。Windows在资源中支持的图形文件有bmp位图文件、cur光标文件和ico图标文件,这些文件可以由其他图形处理软件生成。另外,wav声音文件也可以用在资源中。

一个win32程序的编译内容_第1张图片

编译好目标文件(*.obj)和资源文件(*.res)后,需要连接器将它们连接成可执行文件。连接的时候要用到函数库。在DOS环境下编译用到的是静态函数库,说白了就是编译好的函数模块。当源程序中用到某个函数的时候,链接器从编译好的函数模块中取出对应函数的二进制代码,与obj结合到一起形成最终的exe。但是在win32环境下,大部分公用函数封装在dll文件中,以动态链接的方式提供函数调用。这时库文件中只需要包含函数在dll中的位置信息,不再需要函数二进制代码部分。所以链接的时候也只是把库文件中的位置信息取出来放入最后的可执行文件中。

你可能感兴趣的:(Windows,x86汇编)