在VS2017环境下动手写你的第一个DLL

VS2019中C++动态链接库(DLL)的创建与调用 VS2019中C++动态链接库(DLL)的创建与调用,及一些进阶技巧。 阅读详情

在VS2017环境下,开始写自己的第一个DLL(动态链接库),(本人小白,如果文章中有什么错误,还请各位指点)

  首先介绍一下什么是动态链接库,我们平常在安装游戏,安装软件的时候,有的时候就会提示你,无法打开。。。由于缺失。。。.dll文件,请重新安装。这就是由于安装过程中丢失了某种dll文件产生的,在百度百科上是这么解释的
       DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。
      不管它是啥,它名字里有一个库字,它就能被人调用,就跟c++的头文件似的,但是前面有一个动态链接,其实就是在生成的可执行文件想要运行的时候,必需要有相应dll来辅助,那么为什么要这么做呢
     最开始本人很好奇,用sublime打开了电脑里随便的一个dll,以为能看到一串串的c++代码,但是打开之后,结果是这样的


这谁能看懂啊,,,所以,本人认为,首先,这种东西封装性好,别人谁也看不懂,只有自己内部人员能用,那封装的一定啊,
百度上解释dll文件的作用是 通过DLL文件,程序可以实现模块化,这个不难理解,就是特定功能分类放在一块。第二个是,可以更为容易地将更新应用与各个模块。看到这句话似乎又明白了,这个办法好,咱们可以更新程序的时候更新DLL文件啊,比如只想改程序中的几个数,那我们最开始的时候就把这几个未来想有改变的数放在dll文件里,到时候如果想改,那就重新生成一个dll文件,替换掉原来那个,目的就实现了,这样一想确实是很方便。

那么我们现在就开始一步一步地进行,我想记录的详细一点,首先怕日后自己都不记得,同时也是留下一个纪念

一、打开VS2017:


二、文件->新建->项目


三、Visual C++->Windows桌面->动态链接库DLL->起名字


四、右侧 头文件->添加->新建项


五、选择头文件,起名字


在这个头文件里面我们看到有一个#pragma once 这个东西是起到保证头文件只被编译一次的作用,很像之前用的#ifndef #define #endif 但是用这个确实短小精悍


六、先写源文件,写一个输出一个彩色的“加油,给我们自己“,函数起名叫show()

#include "stdafx.h"
#include "first.h"
#include <Windows.h>
#include <iostream>
using namespace std;
void show(void)
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
	cout << "                    加" ;
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED|FOREGROUND_GREEN);
	cout << "油";
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN| FOREGROUND_BLUE);
	cout << ",";
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_BLUE);
	cout << "给";
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
	cout << "自";
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE);
	cout << "己";
}



七、再写头文件 用到__declspec(dllexport) 

#pragma once

__declspec(dllexport) void show(void);

那么这个__declspec()是非常重要的一个函数,里面参数是dllexport,就是导出,里面参数是dllimport,就是导入。
在要要输出的函数前加上__declspec(dllexport),表示输出。

八、生成解决方案(快捷键F6)



九、我们去项目文件夹里,找到Debug,这里面有我们刚刚生成的文件



这两个是关键的文件



到此我们想要做的就已经实现了,生成了属于咱们的dll ,这个lib是我们在写程序中添加的文件,dll是我们在生成程序之后要使用的文件。
现在我们要用这个dll和lib来测试一下

十、新建一个控制台应用程序


十一、把刚才的first.h和first.lib都复制到test的项目文件夹里

把first.dll放到最外边的那个Debug文件夹里



其中,要在项目->属性->C/C++->代码生成->运行库->改成DLL(/MDd)


然后,在右侧头文件中添加first.h 资源文件中添加first.lib


十二、在test.cpp中写
#include "stdafx.h"
#include "first.h"

int main()
{
	show();
	while (true)
	{

	}
    return 0;
}

十三、重新生成解决方案

去test中的Debug文件夹里

打开test.exe 
成功



如果说,我们想要把这个应用程序发送给一个没有安装vs2017环境的电脑中运行,我们还要添加这些个dll
这是vs中自带的,他们在C:\Windows\SysWOW64 路径下

于是,我们如果要再想在别的程序中用这个库,那我们要保存三个东西,dll,lib ,.h

[填坑]VS2017与MATLAB2016b混合编程(生成dll方式) MATLAB 生成 dll 前的工作 1、配置MATLAB环境 控制面板-&gt;所有控制面板项-&gt;系统-&gt;高级系统设置-&gt;高级-&gt;环境变量 Path一栏,后面追加:C:\ProgramFiles\MATLAB\R2016b\bin\win64      (32位为win32) 更改环境变量后,请重启电脑,否则VS将出现:LINK : fatal error LNK... 阅读详情

相关推荐

vs2017环境下创建Qt的dll文件以及配置调用

vs2017环境下创建Qt的dll文件以及配置调用 首先新建项目-》选择Qt Class Library 选上Core、GUI、Widgets 点击下一步,点击Finishi 新建项,选择Add Qt… 选择Qt Widget Class,之后一路默认创建 此时会生成Form Files文件: 右键Form Files新建项 添加Qt Widget Form File,注意文件名称应为你需要导出的类同名 上图提到的类名如下图(这里其他无关的.h、.cpp和.ui被移除了,其实不移除应该也没影响)

qq_44920401的博客 4173

第五篇--VS2017如何生成Dll文件

参考资料: https://blog.youkuaiyun.com/qq_34097715/article/details/79540933 https://www.cnblogs.com/RascallySnake/p/3182807.html https://blog.youkuaiyun.com/cynophile/article/details/79749524 生成Dll三步走 第一步...

diecexun4639的博客 619

vs2017配置opencv详细教程

vs上配置opencv的详细步骤。

weixin_42450976的博客 7222

VS2017动态链接库(.dll)的生成与使用

大部分参考:https://blog.youkuaiyun.com/m0_37170593/article/details/76445972 记录中间遇到的问题 生成dll解决方案的时候报错 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 "void __cdecl AddAnAdd(int,int (__cdecl*)(int,int))" (?AddAnAdd@@YAXHP6AHHH@Z@Z),该符号在函数 _main 中被引用 DLLTest D:\vs\DLLTest

weixin_41528941的博客 7034

VS2017下dll和lib的使用

前言 最近开始认真掌握VS的各种操作,自然而然避不开dll和lib的使用,自己逛了逛优快云和博客园,看了很多博客,但是并不是很让我满意,一方面是大多不符合我的环境(VS2017 Community),另一方面是太他妈复杂了,什么建成后又各种添加什么的,实在记不熟,所以以下是我的操作。 说明如下: 环境:VS2017 Community 操作:同一个结局解决方案下一个exe项目,一个dll项目,一...

weixin_43118068的博客 4087

VS2017下生成Dll文件并使用

老师让写一个小东西,弄了半天,感觉有点麻烦,所以分享一下,希望能帮助到需要的人 参考的帖子链接 运行环境 **Visual Studio 2017** 操作步骤 创建一个动态链接库 文件->新建->项目 然后分别在头文件和源文件中写一个.h和.cpp文件,这里我是radar.h和Radar.cpp 注意事项 除了自己新建的文件,其他文件不用管 Radar.cpp中应...

qq_38823937的博客 3708

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

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

weixin_53662528的博客 1889

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

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

shimadear的博客 5785

COM编程入门1-创建项目并编写接口

以下项目的构建与开发使用的是vs2010,与vs2015、2017区别不大 1、创建ATL项目并命名为test1 2、应用程序类型选择动态链接库 3、右键项目属性添加类并选择ATL简单对象,命名为Func 4、选择自定义接口 5、 按Ctrl+Shift+C 切换到类视图,右键IFunc类并添加方法,先编写一个整数求和的接口Add 该接口一共三个参数,[in LONG n1,in LONG n2,out retval LONG* p...

Think88666的博客 1556

VS2015调用Matlab编译生成的DLL 编译环境设置 [吐血整理]

本贴目的: 64位编译,VS2015调用Matlab2016编译生成的DLL,搞定:各种运行错误,调试错误。 转载说明:本贴内容仅仅用于软件代码的研究和学习,相关的转载和应用不得损害Microsoft和Mathworks公司的商业利益。有条件的情况下,请稍微支持一下老美的正版软件,例如高校有经费买套正版或者买个学习版的,中国的开发者还是要参与到老外的开发体系中。如果版权所有者认定本贴已经发生侵权,...

weixin_41760829的博客 2万+

【环境配置】vs2017+opencv在win10下的详细环境配置步骤

环境配置最恼火,不过有了这个详细文档,就不是问题了。 一、下载vs2017和opencv安装包 vs2017官网下载地址:https://visualstudio.microsoft.com/ (下载的是3.4.3版本) opencv下载地址:https://opencv.org/releases.html# (下载的是visual studio community2017版) ...

mustard1020的博客 3770

在VS2017环境下动手写你的第一个DLL(转载)

在VS2017环境下,开始写自己的第一个DLL(动态链接库),(本人小白,如果文章中有什么错误,还请各位指点)     首先介绍一下什么是动态链接库,我们平常在安装游戏,安装软件的时候,有的时候就会提示你,无法打开。。。由于缺失。。。.dll文件,请重新安装。这就是由于安装过程中丢失了某种dll文件产生的,在百度百科上是这么解释的        DLL(Dynamic Link Librar...

Lambert0320的博客 300

vs2017配置libtorch

vs2017配置libtorch配置libtorch下载libtorch配置libtorch环境变量配置VS2017环境所踩过的坑发现上面程序编译了输出一大堆warning,但不报错,然而还是生成失败。编译完了,无法运行,找不到XXX.dll文件。有未经处理的异常:Microsoft C++异常:c10::Error,位于内存位置xxx处 配置libtorch 配置libtorch有两个方法,一是直接在vs2017上配置不用CMAKE,二是用CMAKE编译(该方法我踩坑失败,最后转为方法一成功),下面介绍方

weixin_38688399的博客 1933

VS2017调用MATLAB生成的DLL,再打包成DLL供QT调用

最近经手的项目需要调用MATLAB算法运算,并获取返回的结果,需要先在VS2017中实现调用函数,再将这个函数打包成DLL供QT调用,相当于动态链接库DLL中还套了一个DLL,实现步骤及主义事项如文章所示。

H1596355913的博客 2241

VS2017的C++开发心得(九)DLL动态链接——多项目开发

这一篇主要介绍在一个解决方案下如何进行多项目开发。 其实开发代码都放在一个项目下也可以实现它的功能,为什么要使用多项目开发?从编程架构上来讲,树状结构是最优秀的架构。树状结构越发散,它的维护任务就越轻松。这句话的意思是:我们在进行C++工程开发的时候对每一个cpp的功能进行清楚的分割,减少不同功能的cpp文件之间的耦合性,即便当系统非常庞大的时候,维护起来也很方便。说得简单点就是分类工作一开始就...

luoyu510183的博客 7017

Win11上从零跑通Carla自动驾驶仿真:保姆级环境配置与避坑指南(Python 3.7+)

本文详细介绍了在Win11系统上从零配置Carla自动驾驶仿真环境的完整流程,包括Python 3.7+环境搭建、依赖安装、常见问题排查及性能优化技巧。通过保姆级教程帮助开发者快速避坑,实现稳定的自动驾驶仿真测试环境部署。

weixin_33488239的博客 421

VS配置sfml环境(vs2017为例)

** VS配置sfml环境(vs2017为例) 上游戏课用到了sfml,网上有找一些教程,作为一名小白搞了好久,就想着写一个比较详细的教程 1.在官网上下载好sfml(应该是要用外网) 下面是版本配对情况,根据自己的需要下载 保存到电脑中,路径最好不要有中文 2.下载好之后就可以开始配置了 打开VS 创建一个新的项目,这里我创建的是一个控制台应用 打开该项目 ...

origintr的博客 4239

从入门到精通:MediaGo跨平台部署全攻略,Docker+NAS实战案例深度拆解!

本篇将深入解析开源媒体处理工具MediaGo的运作机制,该软件具备跨平台兼容性,支持Windows、MacOS及Linux三大主流操作系统。其核心创新在于采用模块化架构设计,用户无需额外依赖任何插件即可完成快速部署。作为GitHub平台上的开源项目,该工具特别注重用户体验设计,通过Docker容器化方案可无缝接入各类网络存储设备,显著优化系统资源占用并提升数据处理效率。以飞牛云NAS系统为实施案例,本文将详细展示本地化部署全流程。

Yawesh的博客 1954

VS2017安装并配置VTK

VTK的安装 1. 到VTK官网下载最新版本的VTK:https://vtk.org/download/ 这里我下载的是8.2.0,将压缩包下载下来、解压缩。 2. 下载并安装cmake,cmake的安装很简单,直接双击exe即可。这里我用的是很原始的cmake版本,3.8.2的,不影响编译VTK。 3. VTK解压缩后得到一个VTK-8.2.0的文件夹,我在这个文件夹里面新建了两个文件夹b...

小渣的工作记录 8847

docker安装部署openclaw详细教程(安装、卸载、问题处理)

摘要: 本文详细介绍了使用Docker部署OpenClaw本地AI智能体框架的全流程,包括代码下载、容器化安装、交互式配置及Token设置。Docker方案解决了环境配置复杂、依赖冲突等痛点,提供开箱即用的隔离环境。教程涵盖常见错误(如EACCES权限问题、网关启动失败、设备配对需求)的解决方案,并提供了完整的卸载指南。通过Docker部署,用户可快速构建安全、一致的AI智能体开发环境,实现大模型与本地工具的高效连接。

少说,多做 4004

为分析表明卡诺电池技术(或热泵式储电技术)-是目前最佳的储能技术!!!-2021年

卡诺电池(Carnot Battery)是一种基于热力学循环的储能技术,其核心原理是通过热力循环将电能转化为热能存储,并在需要时将热能重新转换为电能输出。这种技术得名于热力学中的卡诺循环原理,由法国工程师卡诺于1824年提出。

qq_15963745的博客 656
下一篇: Python3学习笔记(一) 基本数据类型(1)
Call_Coder
博客等级 码龄9年 82粉丝 3原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值