封装DLL---生成具有导出项的动态链接库
封装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---生成具有导出项的动态链接库相关推荐
- 动态链接库DLL创建及导出函数、调用DLL
1.动态链接库(dll)概述 没接触dll之前觉得它很神秘,就像是一个黑盒子,既不能直接运行,也不能接收消息.它们是一些独立的文件,其中包含能被可执行程序或其他dll调用来完成某项工作的函数,只有在其 ...
- windows动态链接库dll生成和使用
一.生成动态链接库. MyDll.h #pragma once#ifdef _MYDLL_EXPORT#define DLL_API _declspec(dllexport)#else#define ...
- c++dll生成和调用
转载:http://hi.baidu.com/new_day2009/blog/item/51e0c6ec1cd05adbb21cb16d.html 生成Dll文件 新建项目,选择Win32项目,工程 ...
- C++封装dll供C#调用获取U盘/磁盘序列号信息
本文中只讲C++中获取U盘序列号信息的核心代码以及返回值,参数传递的问题,具体封装细节可以查看楼主的一篇其他帖子,里面有具体的封装过程,提供参考(如果使用我这种方法建议一定要看我下面的帖子,因为关于项 ...
- python 如何封装dll_python封装dll的方法
python封装dll的方法 发布时间:2020-09-02 09:57:30 来源:亿速云 阅读:88 作者:小新 这篇文章主要介绍了python封装dll的方法,具有一定借鉴价值,需要的朋友可以参 ...
- DLL生成与调用总结
最近因项目需要将一部分代码封装成DLL供其他程序调用,在这个过程中遇到一些困难,现将过程总结出来,供以后参考. 一.生成DLL 生成DLL比较简单,既可以直接新建一个DLL项目: 也可先新建一个空项目 ...
- 基于GUI的mcc编译和dll生成
基于GUI的mcc编译和dll生成 1.mcc的编译 1.1 MCRInstaller编译器的安装 找到Matlab下的MCRInstaller,双击MCRInstaller编译器,运行安装. 1.2 ...
- ASP 调用dll(VB)及封装dll实例
ASP调用dll及封装dll实例,封装为dll可以提供运行效率,加密代码. 打开VB6,新建ActiveX DLL 2.在工程引用中加入Microsoft Active Server Pages Ob ...
- java生成PDF 导出
tip:生成pdf导出 需要的JAR包链接:https://www.hebaocun.com/asset/search/JAVA生成PDF需要的JAR包/ 原文链接:https://www.hebao ...
最新文章
- 基于沙盒环境,安装python3.6
- liferay 如何 用 国际化
- 小程序用户拒绝授权解决方法
- juc是什么java_JUC简介
- java token redis生成算法_Redis实现单点登录
- android for循环比大小,如何让for()循环花费更少的时间(android)?
- S32K MCAL02-FlexCAN 时钟模块【理论部分】
- android能播放4k视频格式,四平台六款手机4K视频播放实测
- 服务器搭建说明以及接口调用文档
- 计算机网络拓扑结构特点详解
- c语言编写单片机密码锁程序,51单片机密码锁制作的程序和流程图(很详细)
- 线性代数中自由变量为什么取0和1?
- 除了Stripe,Paypal国内还能使用哪些海外支付接口
- 计算机系统运用的科学原理,人工智能的工作原理是什么?
- 判断两条线段是否相交 java_判断两个线段是否相交02
- python如何print日语_Python,如何打印日文、韩文、中文字符串
- 微信小程序显示分页列表
- Spring AspectJ
- 更新mysql表结构,同步数据库表结构
- XiaoHu日志 7/29~8/9