VS2017 DLL动态库使用教程【四】使用头文件

dll的创建和调用 动态链接库英文为DLL,是Dynamic Link Library的缩写。dll是一个被其他应用程序调用的程序模块,其中封装了可以被调用的资源或函数。它是依附于EXE文件创建的的进程来执行的,不能够单独运行。每个程序都可以通过包含dll使用dll中包含的功能,这有助于避免代码重用和促进内存的有效使用。通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。因为模块是彼此独立的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载。 阅读详情

如何让我们的dll程序也能像<stdio.h>一样让别人使用呢?

很简单,我们需要先新建两个文件。

其中mydll.cpp和mydll.h都是需要你在dll项目中新建的,如果你不知道怎么新建一个dll项目,请阅读本教程第一章。

建立完成后,我们首先写mydll.h,代码如下:

#ifndef  MYDLL_EXPORTS //条件编译指令,判断是否定义了 MYDLL_EXPORTS

#define MYDDLL _declspec(dllexport) //如果定义了,MYDDLL宏定义为如下
#else
#define MYDDLL _declspec(dllimport) //没有定义,MYDDLL宏定义为如下
#endif

MYDDLL int add(int a, int b); //头文件

mydll.cpp如下

#include "mydll.h"
#define MYDLL_EXPORTS //这里定义了MYDLL_EXPORTS 触发myddll.h的条件编译

int add(int a, int b)
{
	return a + b;
}

在DLL有一个原则,DLL项目中,函数声明为_declspec(dllexport)

而APP(使用DLL的程序)函数声明为_declspec(dllimport)

所以我们使用条件编译指令,这样DLL定义MYDLL_EXPORTS这个宏,条件编译就把MYDLL声明_declspec(dllexport) 。

使用DLL的程序没有定义MYDLL_EXPORTS,条件编译就把MYDLL声明_declspec(dllimport)。

如果不明白请配合阅读上边的代码。

 

在你的项目中使用头文件

在DLL目录下找到三个文件,"mydll.h","DLL_1.lib","DLL_1.dll",具体名称以你项目命名为准。

也就是一个头文件,一个lib,一个dll,一般lib和dll默认在debug目录下。

然后新建一个文件夹,名称随意,但是要建两个子文件夹,分别是"bin","include"

我把他建在d盘下,名称为mydll

然后把头文件放到include,lib和dll放到bin里

 

然后设置你要使用这个dll程序的属性,选择VC++目录,包含目录设为上边新建的include,库目录设为bin

点击这个添加

 

代码与运行结果如下,值得注意的是,仍然需要#pragma comment(lib,"DLL_1.lib") 否则还是找不到函数

 

笔记中代码均保存到我的网盘下,链接:https://share.weiyun.com/5HMq3Cc

如何实现C++动态调用动态链接库(DLL或SO) 使用函数指针来定义函数的类型,以便在动态库中找到的函数能够正确地调用。函数指针的类型必须与函数的签名(参数类型和返回类型)匹配。// 函数指针#ifdef _MSC_VER // Windows环境下的导出声明__declspec。 阅读详情

相关推荐

VisualStudio2017社区版安装完毕后,找不到stdio.h等头文件的解决方案

一般装完后,头文件是放在C:\Program Files (x86)\Windows Kits\版本号\Include下的,例如,我这里是在:C:\Program Files (x86)\Windows Kits\10\Include,可以直接在C:\Program Files (x86)\Windows Kits目录下搜索是否有缺少的文件。安装完毕后,再次编译竟然好了,不懂这个可选的SDK与已经安装的SDK有啥区别,反正好使了,希望你不要遇到这个坑。这里我的是一致的,不是这个问题,PASS。

sarsscofy的专栏 6244

VS 引用头文件 lib 和 dll

1. 引用头文件 右键项目 -> 属性 -> 配置属性 -> C/C++ -> 常规 中的附件包含目录,输入你所要引用的头文件所在的目录。 之后就可以在某个 cpp 文件中 include<xxx.h>,这样就完成引入头文件。 2. 引用 lib 添加 lib 有两种方法,如下: 配置 lib 文件目录 右键项目 -> 属性 -> 配置属性 -&...

Show me the code. 2128

vs2017静态库和动态库的创建与使用简明教程

vs2017静态库和动态库的创建与使用简明教程静态库创建和使用创建使用易错点动态库创建和使用创建使用注意DLL的好处Others 静态库创建和使用 创建 打开vs2017点击创建新项目,选择静态库; 在StaticLib.cpp文件下写实现,再创建一个对应的头文件写声明: 项目->生成 即可在输出文件夹下得到对应的lib文件: 使用 新建一个项目,点击属性,配置三条款项: VC++目录的包含目录和库目录分别加入lib对应头文件的位置和lib文件的位置; 链接器->输入 添

ZYunfei的博客 3750

动态载入动态库(dll)

今天遇到一个客户需要使用我们的动态库,但是声明只要Dll和头文件(函数声明),别的都不用,lib也不用,客户之所以要这样,是因为他们之前用的动态库的调用方式也是这样的,于是我就赶紧查找了一些关于动态库动态调用的资料,因为用到了,就想记下来了,呵呵~~~~动态库名:cdll5.dll函数原型:unsigned long FunctionTest(unsigned long Rand);(该函

daiafei 1505

vs2017配置opencv详细教程

vs上配置opencv的详细步骤。

weixin_42450976的博客 7222

Visual Studio2017动态库DLL制作与使用

DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件...

凉城旧梦彡的博客 1万+

如何生成dll文件 采用VS2017生成dll文件(动态库文件)和lib文件(静态库文件)以C语言为例

下面我们将用两种不同的姿势来用VS2017生成dll文件(动态库文件)和lib文件(静态库文件),这里以C语言为例,用最简单的例子,来让读者了解如何生成dll文件(动态库文件) 生成动态库文件 姿势一: 第一步:新建一个项目 第二步:选择Windows桌面向导(这里先不要去管上面的“动态链接库(DLL)”) 第三步:选择动态链接库,并空项目打勾√ 第四步:添加一个.c源文件 第五步:(因为这里以C语言为例子,将后缀改为.c) 第六步:在c文...

weixin_40933653的博客 1万+

C++ Boost在VS2017中的使用

首先我们先去boost官方网站http://www.boost.org/中查看boost的最新版本,然后去相应的链接地址进行下载。 可以看到当前boost最新版本是1.66.0,然后我们去1.66.0的下载页面 这里我使用的是VS2017,windows操作系统,所以我下在windows版本的压缩包,当然下面boost官网还给出了Windows Binaries的下载链接。 待会我们一

秋殇阁 2万+

vs2017创建c++动态库工程

开发环境:VS2017、WIN10。 1、vs2017动态库工程创建 文件->新建->项目。新建项目页面中选择,Visual C++->Windows桌面,选择右侧的空工程,添加名称及位置,点击"确定",创建工程。 解决方案平台选:Debug, x64。注意:发布时,选择Release模式。 菜单栏上,项目->属性,进入属性页管理。配置属性->常规,配置类型改为"动态库(.dll)",点击应用、确定。完成工程配置。...

alex1801 4159

VS2017环境下动态链接库编写及调用

最近项目中有用到DLL,于是就去了解了一下动态链接库(DLL)以及基本的的编写方法。先来区分一下静态库和动态库: 静态库 window下是 .lib格式 linux下是 .a格式编译期引入到程序代码 -l 动态库 window下是 .dll格式 linux下是 .so格式运行时候进行链接 DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是...

shimadear的博客 5785

VS2017+QT生成动态库(DLL)并完成调用

一、环境介绍 QT版本: 5.12.6 VS版本: 2017 二、功能介绍 在VS2017环境下创建QT工程,并生成DLL库;然后再创建工程调用测试。 其他链接: Win10+vs2017+QT5.12.6开发环境搭建:https://blog.youkuaiyun.com/xiaolong1126626497/article/details/112402861 Window系统下QT5创建DLL动态库并完成调用:https://blog.youkuaiyun.com/xiaolong1126626497/ar...

4970

vs2017下创建使用动态库。

动态库又称为动态链接库,DLL(Dynamic Link Library)的缩写形式。 动态库是一个包含可由多个程序同时使用的代码和数据的库。 在vs2017创建并使用动态库 1,创建项目 2,在头文件处新建自己的头文件 选中头文件 按Ctrl+Shift+A创建新建项 在add.h中加入一些代码 #pragma once和#ifndef...#endif 都...

GoingJack博客 2658

别再只放按钮了!巧用微信小程序‘长按识别’功能,打造无缝加群体验

本文深入探讨了微信小程序'长按识别'功能在社群运营中的创新应用,通过简化加群流程至一步操作,显著提升用户转化率。文章详细解析了技术实现细节、UI/UX设计策略,并对比了与企业微信API的适用场景,为开发者提供打造无缝加群体验的完整解决方案。

weixin_42627853的博客 435

VS2017 动态库(dll)的制作和调用

参考文献: https://blog.youkuaiyun.com/shimadear/article/details/89202714 https://blog.youkuaiyun.com/Lunar_Queen/article/details/82872157 http://www.runoob.com/w3cnote/cpp-static-library-and-dynamic-library.html 1.文件...

tpz789的博客 6885

ZYNQ新手必看:5分钟搞定SD卡与QSPI Flash双启动模式配置(附常见问题排查)

本文为ZYNQ开发者提供了SD卡与QSPI Flash双启动模式的完整配置指南与深度排错方法。详细解析了从BootROM、FSBL到BOOT.bin的启动链条,并分步讲解了在Vivado/Vitis中的硬件配置、软件工程创建及BOOT.bin文件生成流程。针对SD卡格式化、文件放置以及QSPI Flash烧录中的常见陷阱(如版本差异、时钟配置)给出了具体解决方案和排查清单,帮助开发者快速实现可靠的产品启动与程序固化。

ll5678的博客 932

技术美术个人笔记(十六)——Houdini到UE的大地形

文章目录关于地形白模制作关于PDG流程 关于地形白模制作 用heightfield noise和笔刷刷出合适的mask做山形叠加: 用remap可快捷反转mask ,用来做平原地区的小型丘陵: 接着用clip切平最低处,用distort制造侵蚀等,对部分地区用笔刷进行微调拓宽峡谷: 用经过sweep打平的曲线以及裁切的各种多面体用heightfield_project投影制作河道和水池,用blur mask并remap的方法拓宽河道 用distort、erode制造合适的弯曲和侵蚀,同理可挖出月牙形

小谁的博客 3180

如何用OpenCV实现一个简单功能并打包成一个dll动态库,然后在unity里面调用

       写这篇博​​客是因为最近要完成一些小任务,想把自己做的记录下来,希望能不断进步吧。如果有不对的地方,希望大家指正。        在这里我用的是VS2017 + Unity2018.2 + OpenCV3.4.0,其他的过程应该也会相同吧,大家自己琢磨琢磨好了。 一,下载OpenCV的并配置VS2017环境 1,OpenCV中的下载和配置可以参考这一篇博客,写的很详细也很有用。...

毛毛的博客 3553

RT-DETR改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)

为了弥补现有 IoU 损失在不同检测任务中泛化性弱和收敛速度慢的问题,·Inner-IoU·通过引入比例因子 “ratio” 来控制辅助边界框的尺度大小,利用不同尺度的辅助边界框来计算损失,从而加速边界框回归过程。

Limiiiing的博客 1966

VS下生成C程序静态库(LIB)及动态库(DLL)的方法

一、前言 工作中有时候因为分工合作的原因需要让别人调用自己写的代码去完成某项功能,但是又不想让别人看到具体的实现过程,只是提供一个API形式的接口供别人调用;又或者是其他的一些原因,有必要学习静态库及动态库的相关知识,本文大多数内容均为参考网上资料后的整理,作为学习的总结。 二、DLL与LIB文件的区别 lib是一个二进制文件,与dll类似,供其他程序调用。lib与dll的区别是:dl...

心城追梦的博客 9874

华为OD机试双机位C卷-AI面板识别(Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷 AI面板识别,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解以及在线OJ模拟做题。华为OD机试 - AI面板识别。

qq_45776114的博客 1343

SSD |(二)SSD主控

控制器作为一个片上系统,处理来自用户端的命令并负责管理闪存颗粒。

知识库搭建ing 1965

使用VS2017创建动态库dll和静态库lib并链接至其他项目中

转载: 静态库:https://jingyan.baidu.com/album/f0e83a256230ea22e4910163.html?picindex=14 动态库:https://blog.youkuaiyun.com/cynophile/article/details/79749524 这篇是动态库内容 启动VS2017,点击菜单栏上的“文件->新建->项目”创建一个新的开发项目...

qq_38409301的博客 2527

Pytorch CIFAR10图像分类 EfficientNet v1篇

EfficientNet源自Google Brain的论文EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks. 从标题也可以看出,这篇论文最主要的创新点是. 论文提出了,混合缩放,把网络缩放的三种方式:深度、宽度、分辨率,组合起来按照一定规则缩放,从而提高网络的效果。EfficientNet在网络变大时效果提升明显,把精度上限进一步提升,成为了当前最强网络。

风信子的猫Redamancy的快乐星球 1852

VS2017 用MFC调用QT 带界面的动态库DLL

本文主要参考https://blog.youkuaiyun.com/shuishanga/article/details/52183159文章, 本文与其相似很多。 主要是平台不一样,记录下实现过程。 VS平台:VS2017 QT:5.11.2 目的:使用MFC 调用QT动态库。 使用到的辅助文件qtwinmigrate,可以在这个网址下载。https://github.com/qtpro...

u012512100的博客 3469

【C语言趣味教程】(0) 专栏介绍

这是一套C 语言趣味教学专栏,目前正在火热连载中,欢迎猛戳订阅!本专栏保证篇篇精品,继续保持本人一贯的幽默式写作风格,当然,在有趣的同时也同样会保证文章的质量,旨在能够产出"有趣的干货" !本系列教程不管是零基础还是有基础的读者都可以阅读,可以先看看目录!标题前带星号 (*) 的部分不建议初学者阅读,因为内容难免会超出当前章节的知识点,面向的是对 C 语言有一定基础或已经学过

有道无术, 术尚可求。有术无道, 止于术。 2万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【VisualStudio 2017动态库(.dll)生成与使用】

Windows下 VisualStudio 2017 C++ 动态链接库的生成以及使用提示:以下是本篇文章正文内容,下面案例可供参考以上就是生成动态库并调用的方法。参考文章:blog。

weixin_53662528的博客 1889

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

上一篇: VS2017 DLL动态库使用教程【三】动态内存管理
下一篇: VS2017 DLL动态库使用教程【五】dll中使用导出一个类
崔佳宇_
崔佳宇_ 优质创作者: 嵌入式与硬件开发技术领域 优质创作者: 嵌入式与硬件开发技术领域
博客等级 码龄10年 1万+粉丝 173原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值