倉庫可以分爲:靜態鏈接庫與動態鏈接庫。
靜態鏈接庫與動態鏈接庫都是共享代碼的方式。
區別:
如果採用靜態鏈接庫,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編寫的應用程序所調用?