1. 程式人生 > >VS2017 DLL動靜態庫使用教程【一】建立一個DLL

VS2017 DLL動靜態庫使用教程【一】建立一個DLL

考慮兩個問題:

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;
}

是不是可以使用了呢?