前言
我們在編寫項目過程中,有時難免需要將項目核心源碼進行加密,那麼如何利用VS實現呢?最佳的策略便是將核心代碼編譯成動態庫dll了。
今天呢,簡單地以一個小例子,來介紹一下我自己是如何生成dll的,如有不到位的地方,還請大家留言指正,不甚感激。
A客戶需要小明實現這樣一個功能:利用QT實現兩個整數加法求和的操作,不需要加法求和的具體實現,也就是不需要源碼,只需要能給他dll,他們直接調用它進行加法操作即可。
接到任務後,小明很快便成了A客戶要求的任務。那麼他具體是如何實施的呢?
一 先封裝核心函數,實現功能
先新建一個QT demo,添加控件如下:

其中求和函數屬於核心函數,是通過自己的聰明才智編寫實現的,頭文件以及實現函數如下:
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。

在項目工程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;
}
之後,我們便可以生成dll和lib了,操作如下圖所示:
對應生成的dll和lib所在位置如下圖中所示:
到對應目錄下,即可看到編譯生成的dll和lib文件。
三 調用dll、lib文件
對應上述生成的dll和lib,我們如何在工程中調用呢?
首先,將原解決方案中的VisionIMAX.h和VisionIMAX.cpp文件移除,接下來步驟如下
1)在原項目中新建兩個文件夾「include」和「lib」,其中「include」中存放上述第二步中編寫的「VisionIMAX.h」文件,「lib」中存放上述第二步中生成的dll和lib文件。
2)將include中的VisionIMAX.h頭文件添加到addGUI項目工程中;
3)在將編譯好的dll和lib的目錄添加進工程中。
稍加註意的是,由於我們新建了一個文件夾「include」,因而在調用VisionIMAX.h頭文件的地方,需要改為:#include "./include/VisionIMAX.h"
經過測試,原程序調用dll和lib,可以正確進行加法計算,如圖所示:
由此說明,上述方法正確。
四 跋
最後要感謝同事陳劉明,在摸索如何生成dll和lib的過程中給予了十分中肯的建議與幫助。
閱讀更多 視覺IMAX 的文章