VS2017 DLL動靜態庫使用教程【一】建立一個DLL
阿新 • • 發佈:2019-02-12
考慮兩個問題:
1,printf是我們用過很多次的函式,但這個函式定義在哪裡?他只有<stdio.h>一個宣告。
2,你發明一個有價值的演算法,需要給別人使用,又不想開放原始碼。
在c++裡,使用庫的技術,可以將編譯好的程式碼提供給第其他程式設計師,保證程式碼的隱私性,
庫為兩種:
1,動態庫 Dynamic Link Library (DLL)
兩者區別:
靜態庫在程序編譯時會被連線到目的碼中,程式執行時將不再需要該靜態庫。
動態庫在程式編譯時並不會被連線到目的碼中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。
好了廢話不多,我們開始建立一個動態庫:
首先在vs2017中新建一個DLL庫,名稱隨意,這裡名稱為“DLL_1”
目錄檔案很多,我們暫時無需理會,新建一個cpp檔案,這裡叫mydll.cpp,輸入下列程式碼
//要匯出一個全域性函式,就用關鍵字_declspec(dllexport)來宣告
//下邊是一個把兩個變數相加的函式,相信大家都看得懂
_declspec(dllexport) int add(int a, int b)
{
return a + b;
}
然後右擊這個專案,選擇屬性。
然後設定不適用預編譯頭
多執行緒除錯(/Mtd)
然後編譯,在目錄Debug下會得到dll和lib兩個檔案
然後新建一個空白專案,把得到的兩個檔案新增到他的目錄內,就像你平時做c++練習一樣
這裡這個專案叫“DLLAPP”
輸入程式碼
#include <iostream> #include <Windows.h> //宣告庫 #pragma comment(lib,"DLL_1.lib") //宣告,此函式要在dll匯入 _declspec(dllexport) int add(int a, int b); int main() { int a; printf("%d\n", add(1, 2)); system("pause"); return 0; }
是不是可以使用了呢?