一個win32程序的編譯內容

程序員在編寫一個Win32程序與編寫一個32位控制檯程序有些許不同。Win32程序除了代碼邏輯需要程序編寫外,還需要編寫對應的資源文件。

一個windows圖形化程序的編寫過程如下:

編寫代碼和資源文件->通過編編譯器轉換成可鏈接的機器代碼文件(.obj文件)、對應的資源文件(.res)->鏈接器將代碼和對應的資源鏈接成可執行文件(.exe)。

資源文件內容包括:對話框、快捷鍵、菜單、字符串、版本信息和圖形資源等。這些資源文件與"腳本"文件類似,它的拓展名一般爲rc。其中不同用法定義了不同類型資源,資源腳本文件最後由資源編譯器編譯成資源文件(*.res)。

資源腳本同樣需要很多預定義的內容,這些內容存放在Resource.h頭文件。這就是爲什麼我們編寫資源文件需要導入<resource.h>這樣的頭文件。

資源文件中,不同類型資源的記錄方式是不同的。對話框資源只記錄定義值,如對話框大小、位置等並非存儲最終顯示在屏幕上的像素。這些位置和大小信息只有在Windows最終解釋後纔會顯示在屏幕上被繪畫出像素:菜單、字符串、快捷鍵等由文本構成;圖形資源則真正由像素組成,它們在資源腳本被定義爲一個文件名,由資源編譯器從磁盤文件導入。Windows在資源中支持的圖形文件有bmp位圖文件、cur光標文件和ico圖標文件,這些文件可以由其他圖形處理軟件生成。另外,wav聲音文件也可以用在資源中。

編譯好目標文件(*.obj)和資源文件(*.res)後,需要連接器將它們連接成可執行文件。連接的時候要用到函數庫。在DOS環境下編譯用到的是靜態函數庫,說白了就是編譯好的函數模塊。當源程序中用到某個函數的時候,鏈接器從編譯好的函數模塊中取出對應函數的二進制代碼,與obj結合到一起形成最終的exe。但是在win32環境下,大部分公用函數封裝在dll文件中,以動態鏈接的方式提供函數調用。這時庫文件中只需要包含函數在dll中的位置信息,不再需要函數二級制代碼部分。所以鏈接的時候也只是把庫文件中的位置信息取出來放入最後的可執行文件中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章