windows下dll文件的创建详细教程

2023-11-08

1、前言

dll文件是啥,就不作过多赘述了。现在直接教大家如何创建与使用dll文件。
本文基于windows系统,使用的编译相关工具为visual studio 2019。

2、创建dll

2.1 创建dll工程

首先打开visual studio,然后选择创建新项目,在搜索框中输入dll,然后选择下面的动态链接库(DLL)即可,然后点击下一步。
在这里插入图片描述
在配置新项目这一步,可以根据自己的需要,设置
项目名称
位置等即可。设置前好之后点击创建即可。
在这里插入图片描述

2.2 删除多余的文件并添加源文件

在创建的dll解决方案中可以看到,系统已经预生成了一些头文件和源文件。这些是系统预生成的,本身与创建dll关系不是很大,为了帮助大家理解。可以暂时先移除这些文件。
移除这些文件的方法是,依次在每个文件上右键,然后选择移除
这样就可以移除每个文件
在这里插入图片描述
移除完之后,源文件、头文件目录均为空,然后就可以添加文自己的文件了。

首先在头文件目录上右键,然后选择添加 - ->新建项
在这里插入图片描述
然后选择标头,然后输入标头文件名即可。
在这里插入图片描述
然后用同样的方法,在源文件目录上右键,然后选择添加 -> 新建项
然后选择c++源文件,然后输入源文件名。
操作完成之后,可以看到头文件和源文件目录下面分别各有一个文件。
在这里插入图片描述

2.3 编写源文件

首先编写头文件,内容如下:

// math.h
#ifdef MYDLL_EXPORTS
#define MATH_API __declspec(dllexport)
#else
#define MATH_API __declspec(dllimport)
#endif
MATH_API int Add(int a, int b);
MATH_API int Sub(int a, int b);

这里需要做一个简单的说明:
由于这个头文件,dll本身源文件(math.cpp)以及使用dll的文件都会使用,因此需要一个导出接口和一个导入接口。
对于dll文件本身来说,它需要一个导出接口,这样这个dll文件才能被其它程序调用;
对于其它程序来讲,它需要一个导入接口,这样就可以导入dll文件并使用了。
为了到达这个目的,通过条件编译的方式,在本工程中会自动定义一个宏MYDLL_EXPORTS, 这样dll文件项目本身就是导入接口,由于在其他项目中没有定义宏MATH_EXPORTS,这样就会使用导入接口。
下面接着编写源文件,源文件内容如下:

// math.cpp
#include "math.h"
int Add(int a, int b) {
	return a + b;
}
int Sub(int a, int b) {
	return a - b;
}

2.3 生成dll文件

在生成dll之前,还需要明确生成的版本,到底是release版本,还是debug版本,到底是x64,还是x86。
这里本身可能影响不大,但是dll的版本和使用dll的版本一定要一致。比如生成dll使用的debug/x64,那么使用dll文件的项目,也只能是debug/x64。

然后在myDll解决方案上右键,点击生成即可。
在这里插入图片描述
不出意外的话,生成结果是失败的,并且提示:
在这里插入图片描述
这是因为我们在步骤2.1中删除了一些文件。
这是需要删除相关预编译头。具体做法如下:
在myDll解决方案上右键 -> 属性,在预编译头选择不使用预编译头。
在这里插入图片描述
在这里插入图片描述
设置好之后,然后重新生成,就可以在相关目录下面看到生成的dll文件了。
在这里插入图片描述
至此dll文件就生成成功,然后其它项目就可以调用该dll文件了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows下dll文件的创建详细教程 的相关文章

  • SQL Server Express(或任何版本)可以在 RPi 上运行吗?

    我注意到完整版的 Windows 10 可以在 RPI 3 上运行 我想知道 SQL Server Express 或任何其他版本 是否可用于 ARM 版本的 Windows 我在任何地方都看不到它 所以我怀疑答案是否定的 但想检查一下我是
  • 是否可以调用驻留在 exe 中的非导出函数?

    我想调用驻留在第 3 方 exe 中的函数并获取其结果 好像有should是一种方法 只要我知道函数地址 调用约定等 但我不知道如何 有谁知道我会怎么做 我意识到任何解决方案都是非标准的黑客 但有must成为一种方式 我的非恶意用例 我正在
  • 如何将CString转换为整数和浮点数? [复制]

    这个问题在这里已经有答案了 我正在尝试转换CStringint 和 float 但无法找到任何 C 库函数来完成此操作 请帮忙 正确的UNICODE 符合规定的方式MFC如下 CString sInt T 10 int n ttoi sIn
  • 避免 Inno Setup 中的“无法展开 shell 文件夹常量 userdocs”错误

    我将一些示例文档安装到 Windows 上标准 我的文档 文件夹的 PerfectTablePlan 子文件夹中 这对于 99 以上的用户来说效果很好 但是 如果用户没有 我的文档 文件夹 我会收到许多以下形式的丑陋错误消息 内部错误 无法
  • 在 Jenkins 中执行批处理文件

    我有一个简单的批处理文件 我想要从 Jenkins 调用 运行 执行该文件 Jenkins 中有同样的插件吗 如何从 Jenkins 执行批处理文件 如果有相同的教程或文档 无需为此添加新插件 在Jenkins 选择您的工作名称并转到配置部
  • 在 Android SDK 中设置 JAVA_HOME

    我和对方有一些冲突JAVA HOME配置 当我使用以下代码时 System out println System getenv JAVA HOME I get C jdk1 6 0 23这是正确的地方 但是 当我在 Android buil
  • 在 Windows 上将 Mercurial (hg) 存储库转换为 Git (7)

    我现在真的很沮丧 我有一个现有的 hg 存储库 其中有几个月的编码历史 我想将其放入私有 Github 存储库中 以便我可以从那里对其进行处理 不幸的是我使用的是 Windows 我似乎找不到any转换我实际上可以正常工作的存储库的方法 实
  • RabbitMq 和“致命错误:握手失败 -handshake_decode_error”

    我正在使用 Windows Server 2012 Erlang 19 2 和 RabbitMq 3 6 6 我在使用 TLS 配置端点之间的连接时遇到问题 我已经尝试了所有关于 SO 的答案 以及所有 RabbitMq 文档here ht
  • 使用 IDLE 编辑的 .py 文件消失了

    我曾经有过Edit with IDLE当我右键单击时的选项 py文件 但我多次卸载 重新安装以使某些东西正常工作 但现在它消失了 我检查了注册表HKEY CLASSES ROOT and HKEY LOCAL MACHINE对于价值低于Py
  • 如何让脚本执行结束后自动删除?

    是否可以制作一个Python脚本 在Windows中执行结束时删除 py文件 自删除 这种方式使您的程序不依赖于操作系统 from os import remove from sys import argv remove argv 0 奖励
  • 在OpenCV中将YUV转换为BGR或RGB

    我有一个电视采集卡 其输入内容为 YUV 格式 我在这里看到了与此问题类似的其他帖子 并尝试尝试所述的所有可能的方法 但它们都没有提供清晰的图像 目前最好的结果是 OpenCVcvCvtColor scr dst CV YUV2BGR 函数
  • 更改desktop.ini不会在Windows中自动更新文件夹图标

    我使用此批处理脚本将所有文件夹和子文件夹的图标更改为位于文件夹中的 ico 文件 但是 资源管理器中的文件夹图标不会改变除非我手动重命名desktop ini将资源管理器中的文件更改为其他内容 然后返回desktop ini或者例如将字母更
  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告
  • 检测计算机何时解锁 Windows

    我用过这个优秀的方法 https stackoverflow com questions 20733441 lock windows workstation using python 20733443锁定 Windows 计算机 那部分工作
  • 设置 Form.KeyPreview = true 的缺点?

    我想知道 Form KeyPreview 属性实际上有什么用处 它为什么存在以及将其设置为 true 会带来什么 风险 我想它一定有some负面影响 否则它根本不应该存在 或者至少默认情况下是正确的 EDIT 我很清楚what确实如此 我问
  • C# - 方法必须有返回类型

    我在调用 C 中的方法时遇到问题 不断收到消息 方法 计算 必须有返回类型 using System Diagnostics namespace WindowsFormsApplication1 public partial class F
  • 如何使用命令行压缩文件?

    我想使用批处理文件命令 Windows XP 批处理文件 压缩目录 例如 如果我想解压缩一个文件意味着我可以使用jar xf file zip java bat 文件命令 就像我想要一个命令行批处理来压缩目录一样 如果您使用的是 Ubunt
  • Vim 在 Mingw 上表现异常

    我在 MinGW 4 6 2 上的 Vim 表现得很奇怪 例如 在插入模式下按 Backspace 会删除字符 但我必须用箭头键移动光标才能删除的字符消失 而且它也会使我退出插入模式 另一个例子 按 Del 删除字符有时会生成奇怪的字符 例
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • SetCurrentDirectoryW 中的错误 206

    在我之后之前不清楚的问题 https stackoverflow com questions 44389617 long path name in setcurrentdirectoryw 我以某种方式能够创建一个具有长路径名的目录 但是

随机推荐

  • Oracle 自定义分隔函数

    今天上班时 产品经理反馈客户有一批存量数据中 biz type 存在多个业务键号使用逗号分隔 现在需要将该字段调整为基于逗号分隔的多行记录 Oracle 自定义分隔函数 create or replace function split st
  • 0007.整数反转(简单)

    代码 java版 public class Solution 反转 public static int reverse int x int aa int Math pow 2 31 1 2147483646 int bb int Math
  • Srping:bean循环依赖问题

    Spring 为了解决单例的循环依赖问题 使用了 三级缓存 递归调用时发现 Bean 还在创建中即为循环依赖 单例模式的 Bean 保存在如下的数据结构中 一级缓存 用于存放完全初始化好的 bean private final Map
  • 【Python爬虫与数据分析】爬虫代理IP与访问控制

    目录 一 代理IP 二 正则表达式re 三 通过代理IP对网站循环访问 四 通过selenium工具实现访问控制 注 文末有干货 不过不认真看完你可学不懂 偷笑 一 代理IP 在爬虫对服务器做资源请求时 通常情况是不需要用到代理IP的 但是
  • DBC文件的编辑方法

    1 启动candb 程序 File gt createdatabase选择模板 然后保存dbc文件 2 添加网络节点 在OverallView界面 右击Network nodes选择New弹出如下界面 设置节点名称 把前面编辑好的Messa
  • 一键提升多媒体内容质量:漫谈图像超分辨率技术

    看的一篇图像超分辨推文 在这里记录一下 方便后续查阅 作为将模糊的图像变清晰的神奇技术 图像超分辨率技术在游戏 电影 相机 医疗影像等多个领域都有广泛的应用 在这篇文章中 微软亚洲研究院的研究员们为你总结了图像超分辨率问题中的主流方法 现存
  • html原生js进度条圆形,原生JS环形进度条

    var bg document getElementById canvas1 var ctx bg getContext 2d ctx beginPath ctx lineWidth 10 ctx strokeStyle e5e5e5 va
  • jquery checkbox 设置选中和不选中

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 设置选中 hasApply prop checked true 设置不选中 hasApply prop checked false 获取选中的状态 var status h
  • Active Directory的基本概念

    前言 本文是面对准备加入Active Directory编程的初学者的一份文章 主要是讲解Active Directory 活动目录 的一些概念和相关知识 这篇文章本来是不想写下来的 因为概念性内容的编写需要查阅很多的资料 也怕自己讲的不够
  • 计算机无法识别华为m3,华为M3平板怎么开启学生模式过滤不良网站?

    对于孩子使用电子设备这件事儿 家长们总会陷入到一种矛盾中 即 支持用吧 但是现如今信息复杂 孩子没有自控力 不能每天都盯着 监督不慎误入歧途怎么办 支持不用吧 但是上面又有很多资料资源 值得孩子们去学习 视频教学 益智科普类的软件层出不穷
  • layout_weight 标签用于在线性布局中指定父控件的剩余空间比例的分配

    layout weight 用于在线性布局中指定父控件的剩余空间比例的分配
  • 数学建模竞赛论文中的Word使用

    1 使用样式 除了Word原先所提供的标题 正文等样式外 还可以自定义样式 如果你发现自己是用选中文字然后用格式栏来设定格式的 一定要注意 想想其他地方是否需要相同的格式 如果是的话 最好就定义一个样式 对于相同排版表现的内容一定要坚持使用
  • 如何配置Vue脚手架(Vue CLI)

    第一步 用cmd打开命令提示符 输入命令行 npm config set registry https registry npm taobao org 第二步 打开cmd 输入命令行 npm install g vue cli 中途可能会出
  • MATLAB/simulink时域分析之性能指标(0基础)

    目录 6 时域分析 6 1 性能指标 6 1 1 典型输入信号 6 1 2 一阶系统时域响应 6 1 3 二阶系统时域响应 6 1 4 二阶系统的改善 6 时域分析 由于多数控制系统是以时间作为独立变量 所以人们往往关心输出对时间的响应 对
  • 刷脸支付创新高效促进消费者重新光临

    刷脸支付成为了移动金融产业新的焦点 这离不开代理的卖力推广 刷脸支付代理成为大多创业者的选择 从今往后 脸就是钱包走人寻常百姓家 再也不用担心发生突发情况 尴尬放回商品的局面 现在可以在便利店 部分夫妻店看见这样的画面 收银台不见了 换成了
  • python源码保护之cython

    转载请注明出处 准备 项目需要 是在windows7上操作 python3 7 针对python项目 而非单个的python程序 思路 先将py代码转成c代码 然后编译成pyd window上是pyd linux上是so 文件 安装cyth
  • base64转图片

    base64转图片 param base64Code base64码 public static void convertBase64ToImage String base64Code BufferedImage image byte im
  • Qt绘图与信号事件

    Qt应用开发的基本模式 面向对象 继承QDailog gkdialog h ifndef GK DIALOG H define GK DIALOG H include
  • 我的第一个python爬虫

    文章目录 前言 一 python爬虫是什么 二 豆瓣电影TOP250排行榜信息爬取 1 发送请求 2 获取数据 3 解析数据 4 保存数据 总结 前言 今天想跟大家分享下我完成第一个python爬虫项目的过程 同时记录自己的 第一次 我的第
  • windows下dll文件的创建详细教程

    1 前言 dll文件是啥 就不作过多赘述了 现在直接教大家如何创建与使用dll文件 本文基于windows系统 使用的编译相关工具为visual studio 2019 2 创建dll 2 1 创建dll工程 首先打开visual stud