Win32環境下dll程式設計原理

2021-05-25 03:16:05 字數 927 閱讀 9033

模組控制代碼對於載入資源特別重要。win32 的findresource函式中帶有乙個hinstance引數。exe和dll都有其自己的資源。如果應用程式需要來自於dll的資源,就將此引數指定為dll的模組控制代碼。如果需要exe檔案中包含的資源,就指定exe的模組控制代碼。

但是在使用這些控制代碼之前存在乙個問題,你怎樣得到它們呢?如果需要得到exe模組控制代碼,呼叫帶有null引數的win32函式getmodulehandle;如果需要dll模組控制代碼,就呼叫以dll檔名為引數的win32函式getmodulehandle。

六、應用程式怎樣找到dll檔案

如果應用程式使用loadlibrary顯式鏈結,那麼在這個函式的引數中可以指定dll檔案的完整路徑。如果不指定路徑,或是進行隱式鏈結,windows將遵循下面的搜尋順序來定位dll:

1. 包含exe檔案的目錄,

2. 程序的當前工作目錄,

3. windows系統目錄,

4. windows目錄,

5. 列在path環境變數中的一系列目錄。

這裡有乙個很容易發生錯誤的陷阱。如果你使用vc++進行專案開發,並且為dll模組專門建立了乙個專案,然後將生成的dll檔案拷貝到系統目錄下,從應用程式中呼叫dll模組。到目前為止,一切正常。接下來對dll模組做了一些修改後重新生成了新的dll檔案,但你忘記將新的dll檔案拷貝到系統目錄下。下一次當你執行應用程式時,它仍載入了老版本的dll檔案,這可要當心!

七、除錯dll程式

microsoft 的vc++是開發和測試dll的有效工具,只需從dll專案中執行除錯程式即可。當你第一次這樣操作時,除錯程式會向你詢問exe檔案的路徑。此後每次在除錯程式中執行dll時,除錯程式會自動載入該exe檔案。然後該exe檔案用上面的搜尋序列發現dll檔案,這意味著你必須設定path環境變數讓其包含dll檔案的磁碟路徑,或者也可以將dll檔案拷貝到搜尋序列中的目錄路徑下。  

Win32環境下動態鏈結庫 DLL 程式設計原理

dll檔案中包含乙個匯出函式表。這些匯出函式由它們的符號名和稱為標識號的整數與外界聯絡起來。函式表中還包含了dll中函式的位址。當應用程式載入dll模組時時,它並不知道呼叫函式的實際位址,但它知道函式的符號名和標識號。動態鏈結過程在載入的dll模組時動態建立乙個函式呼叫與函式位址的對應表。如果重新編...

Win32下動態鏈結庫 DLL 程式設計

主題 dll是windows最重要的組成要素,windows中的許多新功能 新特性都是通過dll來 實現的,因此掌握它 應用它是非常重要的。動態鏈結庫不僅可以作為乙個執行模組,包括函式 而且可以包含程式以外的任何資料 或資源 位圖 圖示等等 動態鏈結庫就是給應用程式提供函式或者資源。dll是一種磁碟...

win32下C Socket程式設計

這個例子是從網上轉抄過來的,經過本人測試,沒有任何問題,想學socket程式設計的人可以看一下,非常不錯的入門程式。伺服器端 include include using namespace std const unsigned short listen port 7788 pragma commen...