近期在windows下開發了某個程序,須要將其生成靜態文件(lib)以及動態庫文件(dll),其中參考了很多帖子,有的講得也不是很清楚明白,先將本人實踐過的記錄一下,供後期本身查詢,也供各位大牛點評。windows
1、lib文件的生成與使用函數
一、lib的生成spa
相對來講,靜態庫文件仍是比較容易生成和使用的,在代碼上,貌似也不須要更改什麼,舉例說明:code
頭文件函數聲明形式以下:接口
extern bool Uninitialize();在VS2010項目中,「新建->項目->Win32項目->靜態庫」,配置好相應的項目屬性便可。開發
其中大體包括(根據我的項目須要去配置,如何配置可參考網上其餘帖子,比較多):
源碼「配置屬性->常規->字符集->(選你須要的字符集)」it
「VC++目錄->包含目錄」編譯
「VC++目錄->庫目錄」class
項目生成以後,會在項目目錄中生成相應的lib文件,這個lib文件就是真正的靜態庫文件。(與dll生成中產生的lib文件仍是不一樣的,這在dll生成的時候須要特別注意一下)
二、 lib文件使用,無需過多配置,只須要在「VC++目錄->庫目錄」引入須要的lib文件便可
2、dll文件的生成與使用
一、dll的生成
動態庫文件dll的生成就沒有那麼簡單了,稍微須要修改一點源碼(相比起來,仍是比較喜歡Linux下so文件生成的方式,徹底不須要更改源碼,編譯命令修改便可)
一樣舉例說明,windows下源碼例子 ,一樣對於Uniitialize函數,咱們須要添加dll導出宏定於在函數聲明處:
#ifdef __cplusplus #define EXPORT extern "C" __declspec(dllexport) #else #define EXPORT __declspec(dllexport) #endif //.h文件函數聲明 EXPORT extern bool Uninitialize(); //.cpp文件函數實現 EXPORT bool Uninitialize() { }一樣在VS2010項目屬性中,「新建->項目->Win32項目->DLL」,咱們也須要設置項目屬性,這與靜態庫基本相似,依賴的lib文件可在「連接器->輸入」中設置。
項目生成以後,會在項目目錄中生成相應的dll文件以及一個lib文件,注意,此處的lib文件並不是靜態庫文件,而是dll文件的相應函數導入庫文件。
二、dll的使用
dll使用有兩種方式,一個是隱式使用,一種是顯示使用,這裏我只講講我本身試驗過的隱式使用方式,由於此種方式不須要我demo程序中調用接口時更改接口的使用方式(即不須要LoadLibrary以及GetProcAddress等等),關於顯示調用dll接口的方法,你們可參考網上其餘不少帖子說明
// .h文件,函數聲明仍是須要導出 #ifdef __cplusplus #define EXPORT extern "C" __declspec(dllexport) #else #define EXPORT __declspec(dllexport) #endif EXPORT extern bool Uninitialize();如上隱式使用dll時,對於接口的頭文件,咱們仍是須要導出宏定義
注意:配置項目屬性的時候,生成dll時產生的對應lib文件(即dll的函數導入庫文件)是須要「VC++目錄->庫目錄」引入的,同時將dll文件放在項目目錄exe對應的文件夾下便可