VS如何將核心函式封裝成dll、lib,並供給第三方呼叫?

視覺IMAX發表於2018-10-30

本文首發於微信公眾號【視覺IMAX】,作者原創。

前言

我們在編寫專案過程中,有時難免需要將專案核心原始碼進行加密,那麼如何利用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
#endif

class 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的過程中給予了十分中肯的建議與幫助。

相關文章