Visual Studio2017动态库DLL制作与使用

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

DLL优点:
一、 使用较少的资源

当多个程序使用同一个函数库时,DLL 可以减少在磁盘和物理内存中加载的代码的重复量。这不仅可以大大影响在前台运行的程序,而且可以大大影响其他在 Windows操作系统上运行的程序。

二、 推广模块式体系结构

DLL 有助于促进模块式程序的开发。这可以帮助您开发要求提供多个语言版本的大型程序或要求具有模块式体系结构的程序。模块式程序的一个示例是具有多个可以在运行时动态加载的模块的计帐程序。

三、 简化部署和安装

当 DLL 中的函数需要更新或修复时,部署和安装 DLL 不要求重新建立程序与该 DLL 的链接。此外,如果多个程序使用同一个 DLL,那么多个程序都将从该更新或修复中获益。当您使用定期更新或修复的第三方 DLL 时,此问题可能会更频繁地出现。

一、制作DLL

1、新建动态链接库DLL项目,并取名为firstDll
创建动态库项目
2、新建头文件firstDll.h
这里写图片描述
2、在firstDll.cpp文件添加以下代码:

#include "stdafx.h"
#include "firstDll.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 << "屋檐";
}

4、在firstDll.h文件添加以下代码:

__declspec(dllexport) void show();

5、生成解决方案
这里写图片描述

二、使用动态库DLL

1、新建项目test
这里写图片描述
2、将制作的动态库firstDll.dll拷贝到test项目最外层Debug目录下:
这里写图片描述
3、将制作的firstDll.lib和firstDll.h文件拷贝到解决方案的test目录下:
这里写图片描述
4、添加firstDll.h头文件,并将.lib文件加入到资源文件下,调用动态库定义的show()函数:这里写图片描述
5、在项目->属性->C/C++->代码生成->运行库->改成DLL(/MDd)
这里写图片描述
6、生成解决方案并运行,成功结果如下:
这里写图片描述
也可以在test中的Debug文件夹里直接打开test.exe执行文件,效果如上。这里写图片描述
如果说,我们想要把这个应用程序发送给一个没有安装vs2017环境的电脑中运行,我们还要添加这些个dll

kernel32.dll
KernelBase.dll
msvcp140d,dll
ntdll.dll
ucrtbased.dll
vcruntime140d.dll

以上这些文件是vs中自带的,他们在C:\Windows\SysWOW64 路径下。
我们如果要再想在别的程序中用这个库,那我们要保存三个东西,.dll .lib .h

发布了3 篇原创文章 · 获赞 12 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_37902078/article/details/80144696
今日推荐