Dynamic-Link程式庫資料

Dynamic-Link程式庫 (DLL) 可以包含全域資料或本機資料。

變數範圍

在 DLL 原始程式碼檔案中宣告為全域的變數,會由編譯器和連結器視為全域變數,但載入指定 DLL 的每個進程都會取得該 DLL 的全域變數本身複本。 靜態變數的範圍僅限於宣告靜態變數的區塊。 因此,每個進程預設都有自己的 DLL 全域和靜態變數實例。

注意

您的開發工具可讓您覆寫預設行為。 例如,Visual C++ 編譯器支援 #pragma 區段 ,而連結器支援 /SECTION 選項。 如需詳細資訊,請參閱開發工具隨附的檔。

 

動態記憶體配置

當 DLL 使用任何記憶體配置函式 (GlobalAllocLocalAllocHeapAllocVirtualAlloc) 配置記憶體時,記憶體會配置在呼叫進程的虛擬位址空間中,而且只能存取該進程的執行緒。

DLL 可以使用檔案對應來配置可在進程之間共用的記憶體。 如需如何使用檔案對應來建立具名共用記憶體的一般討論,請參閱 檔案對應。 如需使用 DllMain 函式使用檔案對應來設定共用記憶體的範例,請參閱 在Dynamic-Link程式庫中使用共用記憶體

執行緒區域儲存區

執行緒本機儲存體 (TLS) 函式可讓 DLL 配置索引,以便儲存和擷取多執行緒進程每個執行緒的不同值。 例如,每次使用者開啟新的試算表時,試算表應用程式都可以建立相同執行緒的新實例。 針對各種試算表作業提供函式的 DLL,可以使用 TLS 來儲存每個試算表 (資料列、資料行等目前狀態的相關資訊) 。 如需執行緒本機儲存體的一般討論,請參閱 執行緒本機儲存體。 如需使用 DllMain 函式來設定執行緒本機儲存體的範例,請參閱 在Dynamic-Link程式庫中使用執行緒本機儲存體

Windows Server 2003 和 Windows XP: Visual C++ 編譯器支援可讓您宣告執行緒區域變數的語法: _declspec (執行緒) 。 如果您在 DLL 中使用此語法,您將無法在 Windows Vista 之前的 Windows 版本上明確使用 LoadLibraryLoadLibraryEx 載入 DLL。 如果您的 DLL 會明確載入,您必須使用執行緒本機儲存體函式,而不是 _declspec (執行緒)