1.生成lib文件
首先,我們先建立一個控制檯工程(新建->工程->控制檯程序),添加add.cpp以及add.h文件。
//sub.h #ifndef _SUB_H #define _SUB_H void sub(int a,int b); #endif //sub.cpp #include "sub.h" #include <iostream> void sub(int a,int b) { std::cout<<(a-b)<<std::endl; }
由於在工程中,沒有main()函數,所以直接編譯出錯。這時,要右鍵點擊工程,並選擇工程屬性,出現下圖,選擇靜態鏈接庫即可。
這時候再按F7,build solution即可產生lib文件。在Debug中只生成.lib文件。
2.生成dll文件
生成dll文件的過程與上面的過程是一樣的,只是在選擇Dynamic Library(.dll)即可。在Debug中會生成一個.lib和.dll兩種文件。
3.兩種文件的使用
在使用時,靜態鏈接庫只要把.h和.lib文件加入到工程文件夾中即可。而動態鏈接庫要把.h、.lib和.dll文件加入到工程中。
#include <iostream> #include "sub.h" //鏈接庫的頭文件 using namespaces std; #pragma comment(lib,"sub.lib") //加入鏈接庫 int main() { sub(5,4); return 0; }
4.僅有.dll文件時候的使用方法
在沒有.h和.lib文件時,需要函數指針和WIN32 API函數LoadLibrary、GetProcAddress裝載,只需要.dll文件即可(將.dll文件置入工程目錄中)。
#include <iostream> #include <windows.h> //使用函數和某些特殊變量 typedef void (*DLLFunc)(int,int); //確定調用函數的形參 int main() { DLLFunc dllFunc; HINSTANCE hInstLibrary = LoadLibrary("sub.dll");//加載.dll if (hInstLibrary == NULL) { FreeLibrary(hInstLibrary); } dllFunc = (DLLFunc)GetProcAddress(hInstLibrary, "sub");//第二個參數爲要調用的函數名稱 if (dllFunc == NULL) { FreeLibrary(hInstLibrary); } dllFunc(5,4); FreeLibrary(hInstLibrary); return(1); }
最近一直在搞API這東西,用了curl、tinyxml和jsoncpp幾種開源的庫,在linux下使用倒是很方便,在windows下還是自己編譯的遇到了點問題,從新整理學習下,備用~~