天天看點

DLL學習筆記1

倉庫可以分為:靜态連結庫與動态連結庫。

靜态連結庫與動态連結庫都是共享代碼的方式。

差別:

如果采用靜态連結庫,lib中的指令都被直接包含在最終生成的EXE檔案中;

如果采用動态連結庫(DLL),EXE檔案執行時可以“動态”地引用和解除安裝這個與EXE獨立的DLL檔案

靜态連結庫和動态連結庫的另外一個差別在于靜态連結庫中不能再包含其他的動态連結庫或者靜态庫,

而在動态連結庫中還可以再包含其他的動态或靜态連結庫。

對動态連結庫,

(1)DLL 的編制與具體的程式設計語言及編譯器無關

隻要遵循約定的DLL接口規範和調用方式,用各種語言編寫的DLL都可以互相調用。

(2)動态連結庫随處可見

我們在Windows目錄下的system32檔案夾中會看到kernel32.dll、user32.dll和gdi32.dll,windows的大多數API都包含在這些DLL中。kernel32.dll中的函數主要處理記憶體管理和程序排程;user32.dll中的函數主要控制使用者界面;gdi32.dll中的函數則負責圖形方面的操作。

  一般的程式員都用過類似MessageBox的函數,其實它就包含在user32.dll這個動态連結庫中。由此可見DLL對我們來說其實并不陌生。

(3)VC動态連結庫的分類

Visual C++支援三種DLL,它們分别是Non-MFC DLL(非MFC動态庫)、MFC Regular DLL(MFC規則DLL)、MFC Extension DLL(MFC擴充DLL)。

  非MFC動态庫不采用MFC類庫結構,其導出函數為标準的C接口,能被非MFC或MFC編寫的應用程式所調用;MFC規則DLL 包含一個繼承自CWinApp的類,但其無消息循環;MFC擴充DLL采用MFC的動态連結版本建立,它隻能被用MFC類庫所編寫的應用程式所調用。

問:MFC規則DLL 能否被非MFC或MFC編寫的應用程式所調用?

繼續閱讀