C++ 基礎(五)使用vs2015封裝c++生成.dll檔案、.lib檔案、.h檔案後,給另一個工程使用:使用前,需配置標頭檔案(.h)靜態庫(.lib)和 動態庫(.dll )專案屬性
一、簡介
我是一個認真的人,要麼不寫,要麼我就把步驟、截圖、程式碼,一 一 附上,方便大家參考學習。
1、為什麼要生成DLL和lib?
就是為了給VS工程呼叫(比如C#呼叫、C++工程)。
2、C#為什麼要呼叫DLL和lib?
C++寫的程式,只能通過DLL的形式給C#呼叫。
3、如果我能在C++就能完成工作,需要用C#來寫程式嗎?
不需要,因為C++效率要比C#效率高。但是安全性比不上C#。原因是C++非託管程式碼,C#是託管程式碼。
4、什麼是託管程式碼與非託管程式碼?執行效率對比
不想多說,這篇文章完成能解釋託管程式碼與非託管程式碼的執行效率對比。在同樣的配置環境下,C++效率要比C#效率高出十幾倍。十幾倍啊,嚇死人了。
http://www.cnblogs.com/loverswordsman/articles/1367131.html
好了,不多說了,下面看看如何封裝吧
二、vs2015封裝c++成dll和lib
主要參考https://blog.csdn.net/mango_haoming/article/details/79996073
1、建立名稱為creatDLL的工程
該工程存放到我目錄C:\Users\lanmage2\Desktop\C++test\test1\
2、往工程新增dll.h檔案和對應的dll.cpp
其中,creatDLL.cpp和creatDLL.h檔案在我建立工程的時候就有了。保留這兩個檔案,不作任何修改。
3、往dll.cpp和dll.h新增標頭檔案
注意啊,一般先寫dll.h,才寫dll.cpp。因為標頭檔案是作了一個概括,這個概括包括了定義的函式,而函式的具體實現,就在dll.cpp中完成。
dll.h:
#ifndef DLL_H
#define DLL_H
extern __declspec(dllexport)int add(int x, int y);
extern __declspec(dllexport)int sub(int x, int y);
#endif
dll.cpp:
#include"stdafx.h" #include"dll.h" int add(int x, int y) { return x + y; } int sub(int x, int y) { return x - y; }
4、最後一步,生成解決方案
5、Debug下,生成了兩個檔案,即creatDLL.dll和creatDLL.lib
這兩個檔案,是整個工程編譯下,生成的檔案。以便給C#工程呼叫或其他工程呼叫。
注意啊,creatDLL.dll和creatDLL.lib是在整個工程下生成的,因為工程的名字就叫做creatDLL。它們(creatDLL.dll和creatDLL.lib)與檔案creatDLL.h、檔案creatDLL.cpp,沒有半毛錢關係。
三、creatDLL.dll檔案、creatDLL.lib檔案、dll.h檔案,給另一個工程使用
好了,剛才建立的三個檔案creatDLL.dll/creatDLL.lib/dll.h,現在要使用起來。
1、建立一個空的C++控制檯工程:
其實這個test2工程,就只有一個main.cpp檔案。
2、main.cpp程式碼
#include<iostream>
#include "dll.h"
//#include "creatDll.h"
using namespace std;
int main(int argc, char** argv)
{
/*CcreatDll c1;
cout << ncreatDll << endl;*/
cout << add(1, 2) << endl
<< sub(6, 3) << endl;
getchar();
return 0;
}
3、輸出效果
4、OK,現在來看看配置吧,只有配置成功後,test2工程才能使用
主要參看https://blog.csdn.net/yimiyangguang185/article/details/52585332
4.1、配置標頭檔案存放目錄
把test1的dll.h拷貝到test2/include中,test2的include檔案是自己建立的。
專案——屬性:
編輯進去看看
4.2、配置lib檔案
建立lib資料夾,拷貝test1的creatDLL.lib到其中。
工程---屬性---配置屬性---連結器---常規---附加庫目錄,其目的是新增lib目錄
工程---屬性---配置屬性---連結器---輸入---附加依賴項,其目的是新增lib檔案
4.3、配置動態DLL
將creatDLL.dll拷貝到tests的debug下,就可以了
四、總結
1、以上關於.dll/.lib/.h檔案的生成,配置已經全部完成。
2、主要lib配置,不但要配置目錄,而且還要配置***.lib檔名。
3、大部分的部落格只有生成,沒有配置。並且大部分配置沒有截圖,這我最想吐槽的一點。