Visual Studio2017動態庫DLL製作與使用
DLL(Dynamic Link Library)檔案為動態連結庫檔案,又稱“應用程式拓展”,是軟體檔案型別。在Windows中,許多應用程式並不是一個完整的可執行檔案,它們被分割成一些相對獨立的動態連結庫,即DLL檔案,放置於系統中。當我們執行某一個程式時,相應的DLL檔案就會被呼叫。一個應用程式可使用多個DLL檔案,一個DLL檔案也可能被不同的應用程式使用,這樣的DLL檔案被稱為共享DLL檔案。
DLL優點:
一、 使用較少的資源
當多個程式使用同一個函式庫時,DLL 可以減少在磁碟和實體記憶體中載入的程式碼的重複量。這不僅可以大大影響在前臺執行的程式,而且可以大大影響其他在 Windows作業系統上執行的程式。
二、 推廣模組式體系結構
DLL 有助於促進模組式程式的開發。這可以幫助您開發要求提供多個語言版本的大型程式或要求具有模組式體系結構的程式。模組式程式的一個示例是具有多個可以在執行時動態載入的模組的計帳程式。
三、 簡化部署和安裝
當 DLL 中的函式需要更新或修復時,部署和安裝 DLL 不要求重新建立程式與該 DLL 的連結。此外,如果多個程式使用同一個 DLL,那麼多個程式都將從該更新或修復中獲益。當您使用定期更新或修復的第三方 DLL 時,此問題可能會更頻繁地出現。
一、製作DLL
1、新建動態連結庫DLL專案,並取名為firstDll
2、新建標頭檔案firstDll.h
2、在firstDll.cpp檔案新增以下程式碼:
#include "stdafx.h"
#include "firstDll.h"
#include <Windows.h>
#include <iostream>
using namespace std;
void show(void)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
cout << " 最美的";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN);
cout << "不是下雨天,";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << "而是";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_BLUE);
cout << "曾與你";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
cout << "愛躲過雨的";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE);
cout << "屋檐";
}
4、在firstDll.h檔案新增以下程式碼:
__declspec(dllexport) void show();
5、生成解決方案
二、使用動態庫DLL
1、新建專案test
2、將製作的動態庫firstDll.dll拷貝到test專案最外層Debug目錄下:
3、將製作的firstDll.lib和firstDll.h檔案拷貝到解決方案的test目錄下:
4、新增firstDll.h標頭檔案,並將.lib檔案加入到資原始檔下,呼叫動態庫定義的show()函式:
5、在專案->屬性->C/C++->程式碼生成->執行庫->改成DLL(/MDd)
6、生成解決方案並執行,成功結果如下:
也可以在test中的Debug資料夾裡直接開啟test.exe執行檔案,效果如上。
如果說,我們想要把這個應用程式傳送給一個沒有安裝vs2017環境的電腦中執行,我們還要新增這些個dll
kernel32.dll
KernelBase.dll
msvcp140d,dll
ntdll.dll
ucrtbased.dll
vcruntime140d.dll
以上這些檔案是vs中自帶的,他們在C:\Windows\SysWOW64 路徑下。
我們如果要再想在別的程式中用這個庫,那我們要儲存三個東西,.dll .lib .h