動態連結庫建立
若要建立動態連結庫 (DLL),您必須建立一或多個原始程式碼檔案,而且可能是用來匯出函式的連結器檔案。 如果您打算允許使用 DLL 的應用程式使用載入時間動態連結,則您也必須建立匯入連結庫。
建立原始程序檔
DLL 的來源檔案包含導出的函式和數據、內部函式和數據,以及 DLL 的選擇性 進入點函式 。 您可以使用任何支援建立 Windows 型 DLL 的開發工具。
如果您的 DLL 可能由多線程應用程式使用,則您應該讓 DLL 成為「安全線程」。 若要避免數據損毀,您必須同步存取所有 DLL 的全域數據。 您也必須確定您只連結具有安全線程的連結庫。 例如,Microsoft Visual C++ 包含多個 C 運行時間連結庫版本,其中一個不是安全線程,另一個是線程安全庫。
匯出函式
如何指定應該匯出 DLL 中的函式,取決於您用於開發的工具。 某些編譯程式可讓您使用函式宣告中的 修飾詞,直接在原始程式碼中匯出函式。 其他時候,您必須在傳遞至連結器的檔案中指定匯出。
例如,使用 Visual C++ 時,有兩種匯出 DLL 函式的可能方式:使用 __declspec(dllexport) 修飾詞或模組定義 (.def
) 檔案。 如果您使用 __declspec(dllexport) 修飾詞,則不需要使用 .def
檔案。 如需詳細資訊,請參閱 從 DLL 匯出。
建立匯入連結庫
匯入連結庫 (.lib
) 檔案包含連結器為了解析匯出 DLL 函式的外部參考而需要的資訊,讓系統可以在運行時間找出指定的 DLL 和導出的 DLL 函式。 當您建置 DLL 時,您可以建立 DLL 的匯入連結庫。
如需詳細資訊,請參閱 建置匯入連結庫和導出檔案。
使用匯入連結庫
例如,若要呼叫 CreateWindow 函式,您必須將程式代碼連結至匯入連結庫 User32.lib
。 原因是 CreateWindow 位於名為 User32.dll
的系統 DLL 中,而 User32.lib
是匯入連結庫,用來解析程式代碼中的呼叫,以在 中 User32.dll
導出的函式。 鏈接器會建立數據表,其中包含每個函式呼叫的位址。 載入 DLL 時,將會修正 DLL 中函式的呼叫。 當系統正在初始化進程時,它會載入 User32.dll
,因為進程相依於該 DLL 中的匯出函式,並更新函式位址表中的專案。 對 CreateWindow 的所有呼叫都會叫用從 User32.dll
導出的函式。
如需詳細資訊,請參閱 將可執行文件連結至 DLL。