共用方式為


關於 Dynamic-Link 程式庫

動態連結可讓模組只包含載入時間或執行時間尋找匯出 DLL 函式所需的資訊。 動態連結與較熟悉的靜態連結不同,連結器會將程式庫函式的程式碼複製到呼叫它的每個模組。

動態連結的類型

在 DLL 中呼叫函式的方法有兩種:

  • 載入時間動態連結中,模組會明確呼叫匯出的 DLL 函式,就像是本機函式一樣。 這需要您將模組與包含函式之 DLL 的匯入程式庫連結。 匯入程式庫會提供載入 DLL 所需的資訊,並在載入應用程式時找出匯出的 DLL 函式。
  • 執行時間動態連結中,模組會使用 LoadLibraryLoadLibraryEx 函式在執行時間載入 DLL。 載入 DLL 之後,模組會呼叫 GetProcAddress 函式,以取得匯出 DLL 函式的位址。 模組會使用 GetProcAddress所傳回的函式指標來呼叫匯出的 DLL 函式。 這樣就不需要匯入程式庫。

DLL 和記憶體管理

載入 DLL 的每個進程都會將其對應至其虛擬位址空間。 進程將 DLL 載入其虛擬位址之後,就可以呼叫匯出的 DLL 函式。

系統會針對每個 DLL 維護每個進程參考計數。 當執行緒載入 DLL 時,參考計數會遞增一。 當進程終止,或當參考計數變成零時, (執行時間動態連結只會) ,則 DLL 會從進程的虛擬位址空間卸載。

如同任何其他函式,匯出的 DLL 函式會在呼叫它的執行緒內容中執行。 因此,適用下列條件:

  • 呼叫 DLL 的進程執行緒可以使用 DLL 函式所開啟的控制碼。 同樣地,呼叫進程的任何執行緒所開啟的控制碼可以在 DLL 函式中使用。
  • DLL 會使用呼叫執行緒的堆疊,以及呼叫進程的虛擬位址空間。
  • DLL 會從呼叫進程的虛擬位址空間配置記憶體。

如需 DLL 的詳細資訊,請參閱下列主題: