在VS2017環境下動手寫你的第一個DLL(轉載)
在VS2017環境下,開始寫自己的第一個DLL(動態連結庫),(本人小白,如果文章中有什麼錯誤,還請各位指點)
首先介紹一下什麼是動態連結庫,我們平常在安裝遊戲,安裝軟體的時候,有的時候就會提示你,無法開啟。。。由於缺失。。。.dll檔案,請重新安裝。這就是由於安裝過程中丟失了某種dll檔案產生的,在百度百科上是這麼解釋的
DLL(Dynamic Link Library)檔案為動態連結庫檔案,又稱“應用程式拓展”,是軟體檔案型別。在Windows中,許多應用程式並不是一個完整的可執行檔案,它們被分割成一些相對獨立的
不管它是啥,它名字裡有一個庫字,它就能被人呼叫,就跟c++的標頭檔案似的,但是前面有一個動態連結,其實就是在生成的可執行檔案想要執行的時候,必需要有相應dll來輔助,那麼為什麼要這麼做呢
最開始本人很好奇,用sublime打開了電腦裡隨便的一個dll,以為能看到一串串的c++程式碼,但是開啟之後,結果是這樣的
這誰能看懂啊,,,所以,本人認為,首先,這種東西封裝性好,別人誰也看不懂,只有自己內部人員能用,那封裝的一定啊,
百度上解釋dll檔案的作用是 通過DLL檔案,程式可以實現模組化,這個不難理解,就是特定功能分類放在一塊。第二個是,可以更為容易地將更新應用與各個模組。看到這句話似乎又明白了,這個辦法好,咱們可以更新程式的時候更新DLL檔案啊,比如只想改程式中的幾個數,那我們最開始的時候就把這幾個未來想有改變的數放在dll檔案裡,到時候如果想改,那就重新生成一個dll檔案,替換掉原來那個,目的就實現了,這樣一想確實是很方便。
那麼我們現在就開始一步一步地進行,我想記錄的詳細一點,首先怕日後自己都不記得,同時也是留下一個紀念
一、開啟VS2017:
二、檔案->新建->專案
三、Visual C++->Windows桌面->動態連結庫DLL->起名字
四、右側 標頭檔案->新增->新建項
五、選擇標頭檔案,起名字
在這個標頭檔案裡面我們看到有一個#pragma once 這個東西是起到保證標頭檔案只被編譯一次的作用,很像之前用的#ifndef #define #endif 但是用這個確實短小精悍
六、先寫原始檔,寫一個輸出一個彩色的“加油,給我們自己“,函式起名叫show()
-
#include "stdafx.h"
-
#include "first.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 << "己";
-
}
七、再寫標頭檔案 用到__declspec(dllexport)
-
#pragma once
-
__declspec(dllexport) void show(void);
那麼這個__declspec()是非常重要的一個函式,裡面引數是dllexport,就是匯出,裡面引數是dllimport,就是匯入。
在要要輸出的函式前加上__declspec(dllexport),表示輸出。
八、生成解決方案(快捷鍵F6)
九、我們去專案資料夾裡,找到Debug,這裡面有我們剛剛生成的檔案
這兩個是關鍵的檔案
到此我們想要做的就已經實現了,生成了屬於咱們的dll ,這個lib是我們在寫程式中新增的檔案,dll是我們在生成程式之後要使用的檔案。
現在我們要用這個dll和lib來測試一下
十、新建一個控制檯應用程式
十一、把剛才的first.h和first.lib都複製到test的專案資料夾裡
把first.dll放到最外邊的那個Debug資料夾裡
其中,要在專案->屬性->C/C++->程式碼生成->執行庫->改成DLL(/MDd)
然後,在右側標頭檔案中新增first.h 資原始檔中新增first.lib
十二、在test.cpp中寫
-
#include "stdafx.h"
-
#include "first.h"
-
int main()
-
{
-
show();
-
while (true)
-
{
-
}
-
return 0;
-
}
十三、重新生成解決方案
去test中的Debug資料夾裡
開啟test.exe
成功
如果說,我們想要把這個應用程式傳送給一個沒有安裝vs2017環境的電腦中執行,我們還要新增這些個dll
這是vs中自帶的,他們在C:\Windows\SysWOW64 路徑下
於是,我們如果要再想在別的程式中用這個庫,那我們要儲存三個東西,dll,lib ,.h