12

VS如何将核心函数封装成dll、lib,并供给第三方调用?

 3 years ago
source link: https://mp.weixin.qq.com/s/S0J00276qJuQsvTCjd1DCg
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

VS如何将核心函数封装成dll、lib,并供给第三方调用?

Original 齐小凡 3D视觉工坊 2018-10-30
收录于话题
#学习资源&求职&编程
640?wx_fmt=png&tp=webp&wxfrom=5

全世界只有不到2%的人关注了视觉IMAX

你真是个特别的人

视觉IMAX的第33篇原创文章

我们在编写项目过程中,有时难免需要将项目核心源码进行加密,那么如何利用VS实现呢?最佳的策略便是将核心代码编译成动态库dll了。

今天呢,简单地以一个小例子,来介绍一下我自己是如何生成dll的,如有不到位的地方,还请大家留言指正,不甚感激。

此处我们以一个问题来展开行文:

A客户需要小明实现这样一个功能:利用QT实现两个整数加法求和的操作,不需要加法求和的具体实现,也就是不需要源码,只需要能给他dll,他们直接调用它进行加法操作即可。

接到任务后,小明很快便成了A客户要求的任务。那么他具体是如何实施的呢?

一 先封装核心函数,实现功能

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

640?wx_fmt=png

其中求和函数属于核心函数,是通过自己的聪明才智编写实现的,头文件以及实现函数如下:
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。

640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png

在项目工程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; }

640?wx_fmt=png

之后,我们便可以生成dll和lib了,操作如下图所示:

640?wx_fmt=png

对应生成的dll和lib所在位置如下图中所示:

640?wx_fmt=png

到对应目录下,即可看到编译生成的dll和lib文件。

640?wx_fmt=png

三 调用dll、lib文件

对应上述生成的dll和lib,我们如何在工程中调用呢?
首先,将原解决方案中的VisionIMAX.h和VisionIMAX.cpp文件移除,接下来步骤如下
1)在原项目中新建两个文件夹「include」和「lib」,其中「include」中存放上述第二步中编写的「VisionIMAX.h」文件,「lib」中存放上述第二步中生成的dll和lib文件。

640?wx_fmt=png

2)将include中的VisionIMAX.h头文件添加到addGUI项目工程中;

640?wx_fmt=png

3)在将编译好的dll和lib的目录添加进工程中。

640?wx_fmt=png
640?wx_fmt=png

稍加注意的是,由于我们新建了一个文件夹「include」,因而在调用VisionIMAX.h头文件的地方,需要改为:#include "./include/VisionIMAX.h"

经过测试,原程序调用dll和lib,可以正确进行加法计算,如图所示:

640?wx_fmt=png

由此说明,上述方法正确。

    最后要感谢同事陈刘明,在摸索如何生成dll和lib的过程中给予了十分中肯的建议与帮助。

再谈「相机标定」

那些你所不知道的文献下载网址经验总结

那些精贵的「机器视觉」学习资料总结

回复关键词——知识星球,扫码加入星球

640?



About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK