1. 程式人生 > >C++ 基礎(五)使用vs2015封裝c++生成.dll檔案、.lib檔案、.h檔案後,給另一個工程使用:使用前,需配置標頭檔案(.h)靜態庫(.lib)和 動態庫(.dll )專案屬性

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、大部分的部落格只有生成,沒有配置。並且大部分配置沒有截圖,這我最想吐槽的一點。