看代碼過程中碰到的一些問題以及筆記

問:在VC編譯代碼過程中,Generating Code...的作用是什麼?

答:Generating Code...是用來產生連接用到的文件,但是不是所有的CPP文件都會產生這個,有一些CPP一起作用纔可以產生一些類似於OBJ文件這種。

 

問:如何查看某個DLL中的函數?靜態鏈接是以什麼形式存在的?

答:DLL的函數是封裝起來的,我們只能看到它的接口,不能看到具體函數是如何實現的。靜態鏈接庫是我們經常提到的LIB,它其中的函數是在編譯時被程序調用,而動態的是運行時才調用。用靜態鏈接生成的EXE文件通常比較大,因爲它把函數全部放到了生成的EXE中,而用DLL生成的EXE往往沒那麼大,函數還是放在DLL中,而沒被放到EXE中。

 

動態鏈接與靜態鏈接的不同之處在於:動態鏈接允許可執行模塊(.dll 文件或 .exe 文件)僅包含在運行時定位 DLL 函數的可執行代碼所需的信息。在靜態鏈接中,鏈接器從靜態鏈接庫獲取所有被引用的函數,並將庫同代碼一起放到可執行文件中。

使用動態鏈接代替靜態鏈接有若干優點。DLL 節省內存,減少交換操作,節省磁盤空間,更易於升級,提供售後支持,提供擴展 MFC 庫類的機制,支持多語言程序,並使國際版本的創建輕鬆完成。

問:在看代碼過程中,SDK開發文檔有什麼幫助,它與真正代碼之間的聯繫是怎樣的?

答:在看代碼過程中,可能會用到一些SDK的函數,但不是所有都用到,在我們具體想實現一些功能的時候,可以到SDK中尋找我們需要的函數接口,如果有,我們可以直接使用,如果沒有,我們就要自己實現具有這個功能的函數。

 

問:#define far
        #define near

這種後面啥也沒有,是啥意思啊?

答:類似於這樣的空define一般是和#ifdef或#ifndef聯合使用的。

這樣的define就是說明已經定義了far和near,可以作爲開關使用,比如用在作爲運行日誌的記錄上,當定義時就進行日誌記錄,否則不進行日誌記錄。當然這只是一個用處,這樣的用法主要就是不是使用其值,而是隻要知道是否定義。

32位編程裏已經不再區分far和near了

  near  (近)指針:16位段內偏移地址   
  far(遠)指針:16位段地址+16位段內偏移地址   
  huge(巨)指針:32位規格化的具有唯一性的內存地址 

 

問:#define BI_RGB        0L                                0L是什麼?

答:0L在實際中爲long 型的數,OL就相當於BI_RGB,這種定義有一種好處,就是不用設置其類型

 

學習如何用VC中的資源查找對應的代碼函數。

 

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