DLL和進程的地址空間

來源:互聯網
上載者:User

 

 

    建立D L L常常比建立應用程式更容易,因為D L L一般只包含獨立存在的函數,這些函數可以很容易的被其他的應用程式所調用

 

。D L L中通常不支援訊息迴圈的處理或者視窗的建立。

    D L L只是一組原始碼模組,每個模組包含了應用程式(可執行檔)或另一個D L L將要調用的一組函數。當所有原始碼檔案編

 

譯後,它們就像應用程式的可執行檔那樣被連結程式所連結。但是,對於一個D L L來說,你必須設定linker程式的/ D L L開關。

 

這個開關使得連結程式能夠向產生的D L L檔案映像插入一些dll相關標識的資訊,這樣,作業系統載入程式就能將該檔案映像視為一

 

個D L L而不是應用程式。

    在應用程式(或另一個D L L)能夠調用D L L中的函數之前,D L L檔案映像必須被映射到調用進程的地址空間中。若要進行這

 

項操作,可以使用兩種方法中的一種,即載入時的隱含連結(編譯期載入)或運行期的顯式連結(運行期載入)。編譯期載入和運行期

 

載入都很有用處。

    一旦D L L的檔案映像被映射到調用進程的地址空間中, D L L的函數就可以供進程中啟動並執行所有線程使用。實際上, D L L幾

 

乎將丟失掉它作為D L L的全部特徵。 對於進程中的線程來說,D L L的代碼和資料看上去就像恰巧是在進程的地址空間中的額外代

 

碼和資料一樣。此時DLL可以退化為它可以匯出的函數集合了。

 

    當一個線程調用D L L函數時,該D L L函數使用的是線程的堆棧,參數的傳遞,任何局部變數的產生,使用的都是線程的堆棧。

 

DLL沒有他自己的堆棧,切忌!!

    此外, D L L中函數的代碼建立的任何對象均由調用線程所擁有,而D L L本身從來不擁有任何東西。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.