封装DLL—生成具有导出项的动态链接库

具有导出项的意思是同时生成dll和lib文件,lib文件提供函数的入口,dll包含函数的内容和地址。通过这样的方式可以将自己的代码封装起来供别人使用。如在vs中可以添加附加依赖项将lib添加到项目中,在项目中包含头文件,编译执行即可。(例如在学习cv领域的opencv时需要配置的过程基本一致)

1 环境

Windows11+vs2017(win7以上和vs2015以上的系列方法大致相似)

2 新建vs项目

打开vs,选择“具有可导出项的动态链接库”,在下方输入名称,这个名称也是头文件的名称。例如封装的是一个具有四则运算方法的类,那么名称起为CaculateNum。

点击“确定”即可生成项目,需要做的就是在CaculateNum.h文件中声明类和方法,在.cpp文件中实现这些类的接口。

在.h文件中自动根据项目名称生成了类名,以及自动生成的一个变量和函数示例。其中类名可修改、变量和函数可以删除。

了解之后可以实现自己的类。实现如下:为了增加鲁棒和可读性添加了命名空间和模板方法以及示例。

.h文件的修改如下:

.cpp的修改如下:在.cpp中实现类的方法。

文章末尾给出.h以及.cpp的代码。

3 编译生成lib和dll

在写好代码之后,修改配置和发布平台,这里使用release x64,接着点击“生成”—“生成解决方案”,即可编译项目,

成功之后在文件项目的发布平台文件夹下中找到dll和lib文件并复制,

之后找到.h文件并复制。

4 在其他项目中使用

把复制的文件粘贴新建的工程里,

配置lib文件,

也可以添加头文件到项目中(或者在项目“属性”中添加包含目录),然后引用头文件,之后就可以正常使用了。

输出结果如下:

结尾

.h源码

// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 CACULATENUM_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// CACULATENUM_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef CACULATENUM_EXPORTS
#define CACULATENUM_API __declspec(dllexport)
#else
#define CACULATENUM_API __declspec(dllimport)
#endif//可以添加命名空间
namespace Caculating {// 此类是从 dll 导出的class CACULATENUM_API CaculateNum {public:CaculateNum(void);// TODO: 在此处添加方法。template<typename ADD>ADD add(ADD a, ADD b);template<typename SUB>SUB sub(SUB a, SUB b);};
}

.cpp源码

// CaculateNum.cpp : 定义 DLL 的导出函数。#include "pch.h"
#include "framework.h"
#include "CaculateNum.h"namespace Caculating {// 这是已导出类的构造函数。CaculateNum::CaculateNum(){return;}template<typename ADD>ADD CaculateNum::add(ADD a, ADD b) {return a + b;}template<typename SUB>SUB CaculateNum::sub(SUB a, SUB b) {return a - b;}}template CACULATENUM_API int Caculating::CaculateNum::add(int a, int b);
template CACULATENUM_API float Caculating::CaculateNum::add(float a, float b);
template CACULATENUM_API double Caculating::CaculateNum::add(double a, double b);template CACULATENUM_API int Caculating::CaculateNum::sub(int a, int b);
template CACULATENUM_API float Caculating::CaculateNum::sub(float a, float b);
template CACULATENUM_API double Caculating::CaculateNum::sub(double a, double b);

封装DLL---生成具有导出项的动态链接库相关推荐

  1. 动态链接库DLL创建及导出函数、调用DLL

    1.动态链接库(dll)概述 没接触dll之前觉得它很神秘,就像是一个黑盒子,既不能直接运行,也不能接收消息.它们是一些独立的文件,其中包含能被可执行程序或其他dll调用来完成某项工作的函数,只有在其 ...

  2. windows动态链接库dll生成和使用

    一.生成动态链接库. MyDll.h #pragma once#ifdef _MYDLL_EXPORT#define DLL_API _declspec(dllexport)#else#define ...

  3. c++dll生成和调用

    转载:http://hi.baidu.com/new_day2009/blog/item/51e0c6ec1cd05adbb21cb16d.html 生成Dll文件 新建项目,选择Win32项目,工程 ...

  4. C++封装dll供C#调用获取U盘/磁盘序列号信息

    本文中只讲C++中获取U盘序列号信息的核心代码以及返回值,参数传递的问题,具体封装细节可以查看楼主的一篇其他帖子,里面有具体的封装过程,提供参考(如果使用我这种方法建议一定要看我下面的帖子,因为关于项 ...

  5. python 如何封装dll_python封装dll的方法

    python封装dll的方法 发布时间:2020-09-02 09:57:30 来源:亿速云 阅读:88 作者:小新 这篇文章主要介绍了python封装dll的方法,具有一定借鉴价值,需要的朋友可以参 ...

  6. DLL生成与调用总结

    最近因项目需要将一部分代码封装成DLL供其他程序调用,在这个过程中遇到一些困难,现将过程总结出来,供以后参考. 一.生成DLL 生成DLL比较简单,既可以直接新建一个DLL项目: 也可先新建一个空项目 ...

  7. 基于GUI的mcc编译和dll生成

    基于GUI的mcc编译和dll生成 1.mcc的编译 1.1 MCRInstaller编译器的安装 找到Matlab下的MCRInstaller,双击MCRInstaller编译器,运行安装. 1.2 ...

  8. ASP 调用dll(VB)及封装dll实例

    ASP调用dll及封装dll实例,封装为dll可以提供运行效率,加密代码. 打开VB6,新建ActiveX DLL 2.在工程引用中加入Microsoft Active Server Pages Ob ...

  9. java生成PDF 导出

    tip:生成pdf导出 需要的JAR包链接:https://www.hebaocun.com/asset/search/JAVA生成PDF需要的JAR包/ 原文链接:https://www.hebao ...

最新文章

  1. 基于沙盒环境,安装python3.6
  2. liferay 如何 用 国际化
  3. 小程序用户拒绝授权解决方法
  4. juc是什么java_JUC简介
  5. java token redis生成算法_Redis实现单点登录
  6. android for循环比大小,如何让for()循环花费更少的时间(android)?
  7. S32K MCAL02-FlexCAN 时钟模块【理论部分】
  8. android能播放4k视频格式,四平台六款手机4K视频播放实测
  9. 服务器搭建说明以及接口调用文档
  10. 计算机网络拓扑结构特点详解
  11. c语言编写单片机密码锁程序,51单片机密码锁制作的程序和流程图(很详细)
  12. 线性代数中自由变量为什么取0和1?
  13. 除了Stripe,Paypal国内还能使用哪些海外支付接口
  14. 计算机系统运用的科学原理,人工智能的工作原理是什么?
  15. 判断两条线段是否相交 java_判断两个线段是否相交02
  16. python如何print日语_Python,如何打印日文、韩文、中文字符串
  17. 微信小程序显示分页列表
  18. Spring AspectJ
  19. 更新mysql表结构,同步数据库表结构
  20. XiaoHu日志 7/29~8/9

热门文章

  1. Vue的label标签中for的作用
  2. 参与赢大奖!阿里云机器学习平台PAI助力开发者激发AIGC潜能
  3. 计算机网络学习24:虚拟专用网VPN与网络地址转换NAT
  4. ModelMapper 一文读懂
  5. Paillier算法详解及Java实现
  6. 八股文之深拷贝和浅拷贝
  7. 场馆展览展示项目数字化解决方案
  8. 信息技术基础概念介绍
  9. 是德矢量网络分析仪N5244
  10. 理财笔记 - 长期持有