DLL使用的幾個注意點

來源:互聯網
上載者:User

DLL 的幾個注意點

1.      
DLL 重新導向技術,Windows2000之後的功能,將優先從EXE執行目錄尋找;之前都是優先從SYSTEM下面尋找的;

2.      
DLL的入口函數DllMain(),以及入口參數DLL_PROCESS_ATTACH等;DLL通過使用計數來記錄載入次數;

3.      
DLL的消極式載入,可以在使用到DLL的函數時才載入該DLL,這項技術可以減少程式初始化所需要的時間;需要使用如下的兩個連結開關:

“Lib:DelayImp.lib”;
告訴連結程式將一個特殊函數__delayLoadHelper()嵌入到可執行檔中;

“DelayLoad:MyDLL.dll”;

4.      
DLL的顯示和隱式載入,顯示載入使用LoadLibaray函數載入DLL,然後通過GetProcAddress函數取得DLL中的匯出函數;最後需要使用FreeLibaray函數釋放DLL資源;

5.      
Known DLLs, 已知的DLL,這些DLL總是在同一個目錄中尋找它們,在註冊表中的鍵是:HKLM/SYSTEM/CurrentControlSet/Control/Session Manager/KnownDLLs;系統在此註冊表中的DllDirectory值中存放了查詢目錄,對於Windows 2000該值的內容是:%SystemRoot%/System32

6.      
模組的基址重設,一般預設的EXE載入基址是0x00400000,DLL是0x10000000;編譯器和連結程式已經建立的機器碼,是寫入程式碼變數的地址空間的,如果兩個模組的地址有重疊,就需要重定位第二個模組,修改其中的記憶體位址,這勢必影響載入速度;

 

使用VS內建的Rebase.exe公用程式可以將需要載入的所有DLL類比進程空間進行載入,然後類比進程空間中類比重定位模組,保證沒有重疊,然後修改它們的基址和記憶體位址(並修改磁碟檔案);注意:不要將與作業系統一起發布的DLL進行基址置;

7.      
模組綁定

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.