美文网首页3D视觉工坊C++
VS如何将核心函数封装成dll、lib,并供给第三方调用?

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

作者: 3D视觉工坊 | 来源:发表于2018-10-30 10:30 被阅读13次

    本文首发于微信公众号【视觉IMAX】,作者原创。

    前言

    我们在编写项目过程中,有时难免需要将项目核心源码进行加密,那么如何利用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
    #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;
    }
    

    之后,我们便可以生成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的过程中给予了十分中肯的建议与帮助。

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/ybgwtqtx.html