Visual Studio 2017 动态链接库(.dll)生成与使用的简明教程

写在前面

动态链接库(Dynamic Link Library,缩写为 DLL),是微软公司在Windows操作系统中,实现共享函数库概念的一种方式。这些库函数的扩展名是 ”.dll"、".ocx"(包含ActiveX控制的库)或者 ".drv"(旧式的系统驱动程序)。本篇文章要介绍的是扩展名为".dll"的动态链接库。

动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL文件中,该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容。

使用动态链接库可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。例如,您有一个大型网络游戏,如果把整个数百MB甚至数GB的游戏的代码都放在一个应用程序里,日后的修改工作将会十分费时,而如果把不同功能的代码分别放在数个动态链接库中,您无需重新生成或安装整个程序就可以应用更新。

dll的创建

1、打开"Visual Studio",新建项目-->Visual C++-->Windows桌面-->动态链接库(DLL)。这里我们取项目名为Dll1。

2、创建成功后,按照模板,应该会有下图所示的文件。

然后创建属于自己的.cpp文件和.h文件,右键资源管理器里的"源文件"和"头文件",选择"新建项..."。

3、在.cpp中写下一个简单的函数。

#include "pch.h"    //必要的头文件
#include "myDll1.h" //自己的头文件

//一个简单的函数
int myAdd(int a, int b)
{
    return a + b;
}

4、在.h中写下声明。

#pragma once  //规定只编译一次

//宏定义,增加可读性
#define DATAEXCHANGEDLL_API __declspec(dllexport)

//按C进行编译,声明.cpp中的函数
extern "C" DATAEXCHANGEDLL_API int myAdd(int a, int b);

5、选择x64后,点击菜单栏中的"生成"-->"重新生成解决方案"

成功。

6、生成的.dll,.lib均在项目根目录的x64/Debug文件夹里


dll的使用

1、打开"Visual Studio",新建项目-->Visual C++-->控制台应用。这里我们取项目名为Dll1_test。

2、将之前项目的三个文件移植到新的项目文件夹内。

然后在Visual Studio内进行添加。

右键资源管理器的"头文件",添加"现有项...",选择"myDll1.h"。

右键资源管理器的"资源文件",添加"现有项...",选择"Dll1.lib"。效果如下图

3、在要使用到动态链接库的.cpp文件中,引用头文件"myDll.h",就可以使用Dll1.dll里面的函数了。

#include <iostream>
#include "myDll1.h"
using namespace std;
int main()
{
    int c = myAdd(1, 2);
    cout << c << endl;
    system("pause");
    return 0;
}

成功。


实战

1、创建dll项目同上,名字取为"A1_<学号>",同理添加自己的.cpp和.h,名字均为"A1_<学号>.<xxx>",在.cpp内写函数,在.h中写声明。

.cpp:

#include "pch.h"
#include "A1_000000.h"
#include <iostream>

using namespace std;

/**
 * 求rawIntData每个元素的和
 * @rawIntData 数据数组
 * @rawIntData 数据长度
 * @result 结果
 * @return {返回值类型} 返回值说明
 */
int NewIntAdd(int rawIntData[], int dataNum, int &result)
{
    result = 0;
    for (size_t i = 0; i < dataNum; i++)
    {
        result += rawIntData[i];
    }
    return 0;
}
/**
 * 求rawIntData每个元素的和
 * @rawIntData 数据数组
 * @rawIntData 数据长度
 * @result 结果
 * @return {返回值类型} 返回值说明
 */
int NewFloatAdd(float rawFloatData[], int dataNum, float& result)
{
    result = 0.0f;
    for (size_t i = 0; i < dataNum; i++)
    {
        result += rawFloatData[i];
    }
    return 0;
}
/**
 * 求rawIntData 求最大值
 * @rawIntData 数据数组
 * @rawIntData 数据长度
 * @result 结果
 * @return {返回值类型} 返回值说明
 */
int NewFloatMAX(float rawFloatData[], int dataNum, float& result)
{
    return 0;
}

.h:

#pragma once

#define DATAEXCHANGEDLL_API __declspec(dllexport)
// ***上面为固定的宏定义格式***


// ***下面加入自己的函数声明***
extern "C"
{
    DATAEXCHANGEDLL_API int NewIntAdd(int rawIntData[], int dataNum, int &result);
    DATAEXCHANGEDLL_API int NewFloatAdd(float rawFloatData[], int dataNum, float& result);
    DATAEXCHANGEDLL_API int NewFloatMAX(float rawFloatData[], int dataNum, float& result);
}

2、同样的,选择x64,点击"重新生成解决方案",就可以生成相应的文件,位置跟前面的一样。

3、将三个文件分别移植到"Assignment1"项目中,然后按步骤添加文件进入资源管理器。

将原有的三个函数代码删掉或注释,然后运行即可出结果。

成功。

p.s.在.cpp中,选中NewIntAdd这个函数,按F12跳转或右键-->"转到定义",可以看到来到了.h的声明中,说明此时使用的就是自己的.dll中的函数。

  • 13
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
Visual Studio 2017 是一款功能强大的集成开发环境,可以用于开发各种类型的应用程序,如桌面应用程序、Web 应用程序、移动应用程序等。在进行 Visual Studio 2017 的安装时,可以选择在线安装或离线安装。 离线安装包是一种不需要网络连接的安装方式,可以在没有互联网的环境下完成安装。Visual Studio 2017 的离线安装包是根据不同版本和更新补丁进行划分的,15.9.38 是其中的一个版本号。 离线安装包15.9.38 是 Visual Studio 2017 的一个特定版本,该版本可能包含了一些修复或改进的内容,以提供更好的开发体验和性能。 获得 Visual Studio 2017 离线安装包15.9.38 可以通过以下步骤: 1. 打开 Visual Studio 2017 的官方网站或微软官方下载页面。 2. 在网站上找到并选择适合你的操作系统的版本(如 Windows、macOS)。 3. 确保选择了 Visual Studio 2017 的离线安装选项,并且选择的是版本号15.9.38。 4. 点击下载按钮,等待下载完成。 5. 下载完成后,将离线安装包拷贝到你想要安装的计算机上。 6. 双击离线安装包,按照安装提示进行安装。 请注意,安装的过程可能会耗费一定的时间,具体时间取决于计算机的配置和网络速度。 安装完成后,你就可以使用 Visual Studio 2017 进行应用程序的开发了。如果需要安装额外的组件或进行更新补丁,你可以在 Visual Studio 2017 的界面中找到相应的选项进行操作。 总之,Visual Studio 2017 离线安装包15.9.38 是一个特定版本的离线安装包,你可以通过官方渠道获得并按照步骤进行安装。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Guo_Zhanyu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值