1. 程式人生 > >C#呼叫動態連結庫DLL

C#呼叫動態連結庫DLL

1.概述

動態連結庫(Dynamic Linked Library):將寫好的函式存在庫中,以供其他程式開發呼叫,呼叫方式為“動態的”。
Windows為應用程式提供了豐富的函式呼叫,這些函式呼叫都包含在動態連結庫中。其中有3個最重要的DLL,Kernel32.dll,它包含用於管理記憶體、程序和執行緒的各個函式;
User32.dll,它包含用於執行使用者介面任務(如視窗的建立和訊息的傳送)的各個函式;GDI32.dll,它包含用於畫圖和顯示文字的各個函式。
靜態庫(Static Library):函式和資料被編譯進一個二進位制檔案(通常副檔名為.LIB)。在使用靜態庫的情況下,在編譯連結可執行檔案時,連結器從庫中複製這些函式和資料並把它們和應用程式的其它模組
組合起來建立最終的可執行檔案(.EXE檔案)。

2.動態庫與靜態庫的區別

動態庫DLL:在編譯連結可執行檔案時,只需要連結引入庫,DLL中的函式程式碼和資料並不複製到可執行檔案中,在執行的時候,再去載入DLL,訪問DLL中匯出的函式。
靜態庫LIB:編譯時候與程式打包在一起,需要執行多個靜態庫函式時候,無法共享,會多次裝載,浪費記憶體空間。
簡單的說,靜態庫和應用程式編譯在一起,在任何情況下都能執行,而動態庫是動態連結,顧名思義就是在應用程式啟動的時候才會連結,所以,當用戶的系統上沒有該動態庫時,應用程式就會執行失敗。再看它們的特點:
動態庫:
1.共享:多個應用程式可以使用同一個動態庫,啟動多個應用程式的時候,只需要將動態庫載入到記憶體一次即可;
2.開發模組好:要求設計者對功能劃分的比較好。

3.動態庫與靜態庫的使用

動態庫使用:

[DllImport("kernel32.dll")]//放在類中,後面緊跟著一個對應的函式
public static extern bool Beep(int frequency, int duration);
private void BeepSkinBtn_Click(object sender, EventArgs e)
{
    Beep(1000,1000);//蜂鳴器響
}