本篇详述的是在Vs2019+OpenCV环境下生成动态链接库DLL并加以调用的全过程<1>生成动态链接库:
1、Vs创建新项目 -->动态链接库(DLL)

成都创新互联公司专注于英山企业网站建设,响应式网站建设,
商城网站建设。英山网站建设公司,为英山等地区提供建站服务。全流程
定制网站建设,专业设计,全程项目跟踪,
成都创新互联公司专业和态度为您提供的服务2、 下一步 -->(填写自己的项目名称,选择自己的项目位置) 创建

3、头文件--添加--新建项--.h文件--添加

4、编辑.h文件(例:我生成的 Test.h)

#pragma once
#include#include#include#include#includeusing namespace std;
using namespace cv;
extern "C" __declspec(dllexport) void thresholdIntegral(Mat inputMat, Mat outputMat);
其中,extern "C":告诉编译器将被它修饰的代码按C语言的方式进行编译。
__declspec(dllexport):告诉编译器和链接器被它修饰的函数或变量需要从DLL导出,以供其他应用程序使用;与其相对的还有一句代码是__declspec(dllimport),此修饰符的作用是告诉编译器和链接器被它修饰的函数或变量需要从DLL导入,它在后面也会被用到。
void thresholdIntegral(Mat inputMat, Mat outputMat):就是需要被其他程序调用的函数。 (此处解释来源于博主「Aishen1024」的原创文章,原文链接:https://blog.csdn.net/qq_30139555/article/details/103621955)
5、源文件--添加--新建项--.cpp文件--添加

6、编辑.cpp文件(例:我生成的 Test.cpp)
记得一定要在最上面添加 #include "pch.h"

至此,DLL的代码编写完成。
7、编译


显示成功就可以了。上面的提示信息没有关系,因为这个是dll,不是.exe应用程序,本身就是无法被启动的。单击确定,忽视即可。
<2>配置OpenCV:
上述操作之后,会发现关于opencv库的头都在报错,配置好opencv就没事了。
首先我一直使用的都是 debug x64的平台

1、 项目--属性
1)VC++目录--包含目录--编辑

将您下载的opencv路径下的两个路径添加进去:
D:\Program Files\Visual studio 2019\OpenCV\opencv\build\include
D:\Program Files\Visual studio 2019\OpenCV\opencv\build\include\opencv2
点击确定

2)VC++目录--库目录--编辑

将您下载的opencv路径下的一个路径添加进去:
D:\Program Files\Visual studio 2019\OpenCV\opencv\build\x64\vc15\lib
点击确定

3)链接器--输入--附加依耐项--编辑
将您下载的opencv路径下的opencv_worldxxxd.lib添加进去,它的路径就是您刚刚添加到库目录的路径:
D:\Program Files\Visual studio 2019\OpenCV\opencv\build\x64\vc15\lib
一路点击确定


以上opencv就全部配置完成了。
<3>调用动态链接库:
1、新建一个C++工程项目(例:DllTest),也需按<2>配置好opencv

2、调用DLL
1)将刚刚Dll1的生成工程目录下的x64\Debug文件夹中的“Dll1.dll”和“Dll1.lib”文件复制到"DllTest\DllTest"文件夹中。

这个时候问题来了,发现我们的生成的只有dll文件,却缺少相对应的lib文件,那么要解决一下这个问题了。
PS: 打开之前的dll1.sln
在工程上右键 ->添加 ->新建项 ->选"模块定义文件(.def)" ->随便输入个名字 ->添加


添加完成后,直接编译,再打开文件夹,会发现有相对应lib文件了
2)将刚刚Dll1的生成工程目录下的x64\Debug文件夹中的“Dll1.dll”和“Dll1.lib”文件复制到"DllTest\DllTest"文件夹中。

3)将刚刚Dll1的生成工程目录下的Dll1\Dll1文件夹中的“Test.h”文件复制到"DllTest\DllTest"文件夹中。


4)对新建的C++工程(Adaptive),头文件--添加--现有项
添加了Test.h之后。编辑Test.h文件
#pragma once
#pragma comment(lib,"Dll1.lib")
#include#include#include#include#includeusing namespace cv;
extern "C" __declspec(dllimport) void thresholdIntegral(Mat inputMat, Mat outputMat);
首先,添加一行代码:#pragma comment(lib,"xxx.lib"),它的作用是将您的“xxx.dll”链接到您的工程项目中;
然后,extern "C" __declspec(dllexport) 修改为 extern "C" __declspec(dllimport) ,它的作用是告诉编译器和链接器被__declspec(dllimport)修饰的函数或变量需要从DLL导入。
5)编写需调用dll的cpp文件即可
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
本文标题:详述C++调用opencv编译成dll并调用的全过程-创新互联
标题URL:
http://cqcxhl.cn/article/dheoog.html