1) 創建靜態函數庫
文件--項目--visual c++--win32-- win32項目--靜態庫(取消預編譯頭)
編寫頭文件與源文件--編譯通過後,會在此項目工程的debug目錄下生成*(static).lib文件
2)引用靜態函數庫
建立好一個常規項目後,把*(static).lib文件與靜態函數庫中用到的頭文件都拖到此項目文件夾下
並把項目--項目屬性頁--鏈接器--輸入--附加依賴項中填入*(static).lib
項目--項目屬性頁--鏈接器--常規--附加庫目錄中填入要引用的*(static).lib的所在目錄
3)創建動態函數庫
文件--項目--visual c++--win32-- win32項目--動態庫(勾選上空項目)
編寫頭文件與源文件--編譯通過後,會在此項目工程的debug目錄下生成*(dlllib).dll文件
創建動態函數庫與創建靜態函數庫不同,在編寫靜態函數庫的源文件或頭文件時,按建立常規項目的編寫方式即可,但在創建動態函數庫時,
需要在頭文件中對每個函數的聲明加上extern "C" _declspec(dllexport),例如要聲明一個int mut(int a ,int b)的函數,應該這樣
聲明:extern "C" _declspec(dllexport) int mut(int a,int b);
(加上extern "C"-(C大寫)可以讓C++編寫的DLL在其他語言中也可以調用,但是使用extern "C"的缺陷是不能導出C++的類成員函數,只能導出全局函數。)
同樣在源文件中,函數定義前也應該加上 _declspec(dllexport)的聲明
如果不加以上的特殊聲明,是不會生成下面提到的*(dlllib).lib文件的。
4)引用動態函數庫
打開DOS命令窗口,用CD命令轉到*(dlllib).dll文件所在目錄(注意,CD命令是切換同一盤符下的目錄,而不能切換不同盤符,如果要從
C盤切換至D盤,直接輸入“D:”即可,這裏也說明LINUX與WINDOWS文件系統是不同的)。
將 X:/Program Files/Microsoft Visual Studio 8/VC/bin 目錄下的vcvars32.bat拖到DOS環境下,它的作用是爲使用viual studio
2005 x86工具設置環境。
輸入命令:dumpbin -exports *(dlllib).dll (實現函數的導出)
顯示類似如下信息:
ordinal hint RVA name
1 0 00011087 ?add@@YAHHH@Z = @ILT+130(?add@@YAHHH@Z)
2 1 00011073 ?subtract@@YAHHH@Z = @ILT+110(?subtract@@YAHHH@Z)
之後在*(dlllib).dll文件所在目錄下,會生成一個*(dlllib).lib的文件,將這兩個文件都拷入所引用函數庫的工程文件夾下
並把項目--項目屬性頁--鏈接器--輸入--附加依賴項中填入*(dlllib).lib
項目--項目屬性頁--鏈接器--常規--附加庫目錄中填入要引用的*(dlllib).lib的所在目錄
至此就可以實現自定義函數庫的引用
在VC下生成靜態函數庫與在VS2005下是一樣的,在引用方面,也需要將.h .lib文件拖到calllib的工程目錄下,然後在main()下包括mylib.lib中的頭文件與#pragma comment(lib,"mylib.lib")表明使用靜態庫文件。(這裏不需將mylib的全路徑給出,因爲已經拖到了calllib的工程目錄下)也可以不加#pragma comment(lib,"mylib.lib")而在project->add to project->Files 將mylib.lib加至工程中。