系列文章目录
第一章:Visual Studio 2019 动态链接库DLL建立
目录
前言
最近开始一个医疗机器视觉项目,需使用C++,记录一些关键点。
环境:Windows10, VS2019,opencv320
一、DLL是什么?
动态链接库DLL是一些独立的文件,其中包含能被可执行程序或其他dll调用来完成某项工作的函数,只有在其他模块调用dll中的函数时,dll才发挥作用。在实际编程中,我们可以把完成某项功能的函数放在一个动态链接库里,然后提供给其他程序调用。像Windows API中所有的函数都包含在dll中,如Kernel32.dll, User32.dll, GDI32.dll等。
二、建立步骤
1.安装VS
官方网址,最新版为2022
Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 (microsoft.com)
2.建立DLL库
代码如下(示例):
1,新建项目
2,选择动态链接库(DLL)
3,设置项目名称,无特殊需求不勾选(将解决方案和项目放在同一目录中)
4,生成默认文件,无需修改。
5,使用属性管理器配置属性,详情见系列文章第二章。
6,修改预编译头,属性页——C/C++——预编译头——不适用预编译头。
注:不修改程序会报错,具体以后再研究
三、新建DLL
1,在项目下头文件,右击新建头文件(.h),用来声明需要导出的函数接口。
2,在项目下源文件,右击新建源文件(.cpp),用来实现被声明的函数。
工程目录如下:
下面就可以编写代码了。
.h文件
下面代码的功能是声明一个可被调用的函数“SayHello()”,它的返回类型是void。
#pragma once
#include <iostream>
extern "C" __declspec(dllexport) void SayHello();
现在分析一下extern "C" __declspec(dllexport) void SayHello();这一句代码,其中extern "C"的作用是告诉编译器将被它修饰的代码按C语言的方式进行编译,这么做的意义在此不做讨论,感兴趣的话可自行查询。然后分析__declspec(dllexport),此修饰符告诉编译器和链接器被它修饰的函数或变量需要从DLL导出,以供其他应用程序使用;与其相对的还有一句代码是__declspec(dllimport),此修饰符的作用是告诉编译器和链接器被它修饰的函数或变量需要从DLL导入,它在后面也会被用到。最后是函数void SayHello(),它就是需要被其他程序调用的函数。
.cpp文件
实现.h文件中声明的函数
#include "pch.h"
#include "TestDLL.h"
void SayHello()
{
std::cout << "Hello!你成功了!" << std::endl;
}
代码编写完成。
四、编译DLL
如果属性环境没有问题,点击编译
点击编译跳出下面弹窗,点击确认(DLL不会生成exe,可无视报错)
在项目路径——x64——debug文件夹下生成文件。
编译完成。
总结
1、上述教程只适用于调试模式下,若想直接启动TestDLLCreated.exe应用程序,还需将“TestDLL.dll”和“TestDLL.lib”文件复制到与TestDLLCreated.exe同一目录下才可以运行!
2、可使用属性管理器配置属性,别的项目可以直接使用属性,避免重复设置。
参考:https://blog.csdn.net/elaine_bao/article/details/51784864