日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

DLL基础——Windows核心编程学习手札之十九

發布時間:2025/4/16 windows 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DLL基础——Windows核心编程学习手札之十九 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

DLL基礎

——Windows核心編程學習手札之十九

Windows API中的所有函數都包含在DLL中,3個最重要的DLLKernel32.dll,它包含用于管理內存、進程和線程的各個函數;User32.dll包含用于執行用戶界面任務(如窗口的創建和消息的傳送)的各個函數;GDI32.dll包含用于畫圖和顯示文本的各個函數。Windows還配有若干別的DLL,用于執行一些特殊任務,如AdvAPI32.dll包含用于實現對象安全性、注冊表操作和事件記錄的函數;ComDlg32.dll包含常用對話框(如File OpenFile Save);ComCtl32.dll則支持所有的常用窗口控件。

DLL中通常沒有用來處理消息循環或創建窗口的支持代碼,DLL只是一組源代碼模塊,每個模塊包含了應用程序(可執行文件)或另一個DLL將要調用的一組函數。當所有源代碼文件編譯后,它們就像應用程序的可執行文件那樣被鏈接程序所鏈接。對于一個DLL,需要設定鏈接程序的/DLL開關,該開關使得鏈接程序能夠向產生的DLL文件映像發出稍有不同的信息,如此,操作系統加載程序就能將該文件映像視為一個DLL而不是應用程序。在應用程序或另一個DLL能夠調用DLL中的函數之前,DLL文件映像必須被映射到調用進程的地址空間中,可選用加載時的隱含連接和運行期的顯示連接。一旦DLL的文件映像被映射到調用進程的地址空間中,DLL的函數就可以供進程中運行的所有線程使用。

創建DLL模塊步驟:

1)先創建一個頭文件,包含從DLL輸出的函數原型、結構和符號,DLL的所有源代碼模塊均包含該頭文件、以幫助創建DLL

2)要創建一個C/C++源代碼模塊(或多個模塊),用于實現在DLL模塊中的函數和變量;

3)創建DLL模塊,編譯器對每個源代碼模塊進行處理,產生.obj模塊;

4)所有.obj模塊創建完成后,鏈接程序將所有.obj模塊內容組合在一起,產生一個DLL映像文件,包含用于DLL的所有二進制代碼和全局/靜態數據變量;

5)如果鏈接程序發現DLL的源代碼模塊至少輸出了一個函數或變量,那么鏈接程序也生成一個.lib文件,列出所有已輸出函數和變量的符號名;

創建可執行模塊(調用DLL)步驟:

6)在引用函數、變量、數據、結構或符號的所有源代碼模塊中,必須包含DLL開發人員創建的頭文件;

7)要創建一個C/C++源代碼模塊(或多個模塊),在可執行模塊中實現DLL中的函數和變量;

8)創建可執行模塊,編譯器生成.obj模塊,鏈接程序組合.obj生成可執行的映像文件;

運行可執行模塊(調用DLL),操作系統的加載程序執行步驟:

9)加載程序為新進程創建一個虛擬地址空間,可執行模塊被映射到新進程的地址空間,加載程序對可執行模塊的輸入進行分析。對于列出的每個DLL名字,加載程序找出用戶系統上的DLL模塊,再將該DLL映射到進行的地址空間。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的DLL基础——Windows核心编程学习手札之十九的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。