VS如何將核心函數封裝成dll、lib,並供給第三方調用?

前言

我們在編寫項目過程中,有時難免需要將項目核心源碼進行加密,那麼如何利用VS實現呢?最佳的策略便是將核心代碼編譯成動態庫dll了。

今天呢,簡單地以一個小例子,來介紹一下我自己是如何生成dll的,如有不到位的地方,還請大家留言指正,不甚感激。

A客戶需要小明實現這樣一個功能:利用QT實現兩個整數加法求和的操作,不需要加法求和的具體實現,也就是不需要源碼,只需要能給他dll,他們直接調用它進行加法操作即可。

接到任務後,小明很快便成了A客戶要求的任務。那麼他具體是如何實施的呢?

一 先封裝核心函數,實現功能

先新建一個QT demo,添加控件如下:


VS如何將核心函數封裝成dll、lib,並供給第三方調用?


其中求和函數屬於核心函數,是通過自己的聰明才智編寫實現的,頭文件以及實現函數如下:

VisionIMAX.h:

#pragma once#include "iostream"#include"sstream"using namespace std;class VisionIMAX{public:///求和計算
static int addInt(int &firstNum,int &secondNum);
};

VisionIMAX.cpp:

#include "VisionIMAX.h"///求和計算int VisionIMAX::addInt(int &firstNum, int &secondNum)
{ int total = firstNum + secondNum; return total;
}

為了將求和函數在給他人調用時,避免讓對方窺見源碼,此處我們將其編譯成dll,提供給用戶,具體操作如下。

二 將核心函數生成dll、lib(此處以debug模式下為例,release模式下相類似)

在原解決方案中,添加一個新項目,命名為VisionIMAX。


VS如何將核心函數封裝成dll、lib,並供給第三方調用?


VS如何將核心函數封裝成dll、lib,並供給第三方調用?


VS如何將核心函數封裝成dll、lib,並供給第三方調用?


VS如何將核心函數封裝成dll、lib,並供給第三方調用?


在項目工程VisionIMAX中添加VisionIMAX.h和VisionIMAX.cpp,實現求和函數。

VisionIMAX.h文件如下:

#include "iostream"#include"sstream"using namespace std;///VISIONIMAX為類名的大寫#ifdef VISIONIMAX_EXPORTS#define VISIONIMAX_API __declspec(dllexport)#elif defined (VISIONIMAX_API_IMPORT_DLL)#define VISIONIMAX_API __declspec(dllimport)#else#define VISIONIMAX_API#endifclass VISIONIMAX_API VisionIMAX{public: ///求和計算
static int addInt(int &firstNum, int &secondNum);

};

VisionIMAX.cpp文件如下:

#include "VisionIMAX.h"///求和計算int VisionIMAX::addInt(int &firstNum, int &secondNum)
{ int total = firstNum + secondNum; return total;
}


VS如何將核心函數封裝成dll、lib,並供給第三方調用?



之後,我們便可以生成dll和lib了,操作如下圖所示:


VS如何將核心函數封裝成dll、lib,並供給第三方調用?



對應生成的dll和lib所在位置如下圖中所示:


VS如何將核心函數封裝成dll、lib,並供給第三方調用?



到對應目錄下,即可看到編譯生成的dll和lib文件。


VS如何將核心函數封裝成dll、lib,並供給第三方調用?


三 調用dll、lib文件

對應上述生成的dll和lib,我們如何在工程中調用呢?

首先,將原解決方案中的VisionIMAX.h和VisionIMAX.cpp文件移除,接下來步驟如下

1)在原項目中新建兩個文件夾「include」和「lib」,其中「include」中存放上述第二步中編寫的「VisionIMAX.h」文件,「lib」中存放上述第二步中生成的dll和lib文件。


VS如何將核心函數封裝成dll、lib,並供給第三方調用?


2)將include中的VisionIMAX.h頭文件添加到addGUI項目工程中;


VS如何將核心函數封裝成dll、lib,並供給第三方調用?



3)在將編譯好的dll和lib的目錄添加進工程中。


VS如何將核心函數封裝成dll、lib,並供給第三方調用?


VS如何將核心函數封裝成dll、lib,並供給第三方調用?



稍加註意的是,由於我們新建了一個文件夾「include」,因而在調用VisionIMAX.h頭文件的地方,需要改為:#include "./include/VisionIMAX.h"

經過測試,原程序調用dll和lib,可以正確進行加法計算,如圖所示:


VS如何將核心函數封裝成dll、lib,並供給第三方調用?


由此說明,上述方法正確。

四 跋

最後要感謝同事陳劉明,在摸索如何生成dll和lib的過程中給予了十分中肯的建議與幫助。


分享到:


相關文章: