欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-12 09:38:13
...
在VS2017环境下,开始写自己的第一个DLL(动态链接库)


本节课程源码链接:https://download.csdn.net/download/wise18146705004/10537604

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

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

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

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

一、打开VS2017:

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

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

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

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

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

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

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

五、选择头文件,起名字

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

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

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

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

  1. #include "stdafx.h"
  2. #include "first.h"
  3. #include <Windows.h>
  4. #include <iostream>
  5. using namespace std;
  6. void show(void)
  7. {
  8. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
  9. cout << " 加" ;
  10. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED|FOREGROUND_GREEN);
  11. cout << "油";
  12. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN| FOREGROUND_BLUE);
  13. cout << ",";
  14. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_BLUE);
  15. cout << "给";
  16. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
  17. cout << "自";
  18. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE);
  19. cout << "己";
  20. }



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

  1. #pragma once
  2. __declspec(dllexport) void show(void);

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

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

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


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



在VS2017环境下动手写你的第一个DLL
这两个是关键的文件


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

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

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

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

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

在VS2017环境下动手写你的第一个DLL
把first.dll放到最外边的那个Debug文件夹里

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


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

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

然后,在左侧头文件中添加first.h 和 在资源文件中添加first.lib(注意这里添加的方式是左键选中头文件和资源文件以后,右键-添加-现有项,然后在相应的文件夹处添加选中文件添加上即可)

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

十二、在test.cpp中写
  1. #include "stdafx.h"
  2. #include "first.h"
  3. int main()
  4. {
  5. show();
  6. while (true)
  7. {
  8. }
  9. return 0;
  10. }

十三、重新生成解决方案

去test中的Debug文件夹里

在VS2017环境下动手写你的第一个DLL
打开test.exe 
在VS2017环境下动手写你的第一个DLL
成功



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

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