[MFC] 动态链接库的制作过程和使用方法与总结

简介: [MFC] 动态链接库的制作过程和使用方法与总结

 关于动态链接库的制作过程和使用方法这部分,看了不少网上相关的内容,都看的不是很懂,所以在这里写一篇文章给那些给我一样看不懂的小白参考一下,好了言归正传,

   假设有两个C++项目A、B,并且都定义了很多的子函数,这些子函数之间调用关系复杂,如果B需要通过使用DLL库的方式调用A中的一个子函数(或者多个),怎么办?

   这里介绍一下我的动态链接库制作目的,我的编程环境是MFC联合Halcon,需要将halcon程序导出成C++程序,然后制作成动态链接库,供我的MFC程序调用。

   思路:新建一个C++空项目,配置好halcon的环境,将转换成C++的Halcon的程序放到新建项目中,在将函数封装成动态链接库.dll,配置到MFC程序中供主程序调用。

   动态链接库的制作步骤:

   一、首先建立一个c++程序,空的就可以,这里面我在项目A中定义了一个函数make_distance_detect_model ,其函数声明所在头文件和函数定义所在源文件分别为:

LineDetect.h

extern "C" __declspec(dllexport) void make_distance_detect_model (HObject ho_ModelImage, HTuple hv_WindowHandle);

LineDetect.cpp

extern "C" __declspec(dllexport) void make_distance_detect_model (HObject ho_ModelImage, HTuple hv_WindowHandle)

{

}

注:自己选择设不设置接口,如果MFC程序调用该函数之后,后面需要用到该函数里面的变量,那么就需要设置接口,如果接口特别多还可以采用定义结构的方式,用指针调用函数里面的变量,这个后边介绍。

   二、上面定义完之后,将项目A的配置类型改为动态库(.dll),然后生成解决方案

输出窗口出现如下结果,代表生成动态链接库成功

   动态链接库的调用:

  一、首先,找到A项目中Debug目录下找到生成的库.dll,.lib文件,然后复制到B项目(MFC)的工程目录.vcxproj下(如B项目也是WIN32项目,则复制到其Debug目录下),这里主要介绍前者

复制到

二、切换到B项目,可以新建一个头文件,并在该头文件中指定导出库.lib的路径

#pragma comment(lib,"D://Visual Studio codes//LineDemo//LineDemo//LineDetect.lib")
extern "C" __declspec(dllexport) void make_distance_detect_model (HObject ho_ModelImage,  HTuple hv_WindowHandle);

   致此,动态链接库的制作过程和使用方法。

 

这里记录一下我在配置过程中遇到的问题:

一、

问题:#error : WINDOWS.H already included. MFC apps must not #include <windows.h>

解决:因为我是将我的MFC程序中的类函数封装了,而封装之前我是类中和主程序共用一个CComboBox类型的控件的变量,所以在新建的A项目中需要包含该项目

注意上面的包含完之后虽然可以定义CComboBox类型变量,但会出现我说的错误,原因是#include "afxwin.h"和原程序都包含了<windows.h>,需要在预编译头文件stdafx.h文件中包含#include “afxwin.h”,说白了就是将包含文件换个位置

目录
相关文章
|
自然语言处理 安全 C++
【C++ 格式化输出 】C++20 现代C++格式化:拥抱std--format简化你的代码
【C++ 格式化输出 】C++20 现代C++格式化:拥抱std--format简化你的代码
10433 4
Halcon区域region的生成,使用点坐标
Halcon区域region的生成,使用点坐标
1197 0
|
机器学习/深度学习 文件存储 异构计算
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v2,加速训练,快速收敛
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v2,加速训练,快速收敛
347 1
|
编译器 C++
使用Visual Studio 2022 创建lib和dll并使用
本文介绍了如何在Visual Studio 2022中创建静态库(lib)和动态库(dll),并展示了如何使用这些库。文章详细说明了创建新项目、编写代码、生成库文件、配置项目属性以及编写测试代码的步骤,并提供了相应的截图和代码示例。作者还分享了在创建和使用库的过程中遇到的一些问题及其解决方案。
4791 0
使用Visual Studio 2022 创建lib和dll并使用
|
存储 缓存 前端开发
利用 Webpack 5 的持久化缓存来提高构建效率
【10月更文挑战第23天】利用 Webpack 5 的持久化缓存是提高构建效率的有效手段。通过合理的配置和管理,我们可以充分发挥缓存的优势,为项目的构建和开发带来更大的便利和效率提升。你可以根据项目的实际情况,结合以上步骤和方法,进一步优化和完善利用持久化缓存的策略,以达到最佳的构建效果。同时,不断探索和实践新的方法和技术,以适应不断变化的前端开发环境和需求。
|
传感器 开发工具 C#
[3D&Halcon] SmartRay激光3D传感器Halcon采集
[3D&Halcon] SmartRay激光3D传感器Halcon采集
373 0
|
Java 数据安全/隐私保护 Windows
Windows Service 服务中,不能访问挂载目录(网络映射盘)
Windows Service 服务中,不能访问挂载目录(网络映射盘)
646 0
|
Windows
MFC学习之路(9)之如何使控件大小随着对话框大小自动调整
MFC学习之路(9)之如何使控件大小随着对话框大小自动调整
570 0
|
机器学习/深度学习 数据采集 人工智能
构建高效AI模型:深度学习优化策略和实践
【5月更文挑战第26天】 在人工智能的浪潮中,深度学习作为一项核心技术,其模型构建与优化一直是研究的热点。本文旨在探讨如何通过一系列创新性的优化策略提升深度学习模型的性能及效率。我们将从理论与实践两个维度出发,详细阐述包括数据预处理、网络结构设计、损失函数选择、正则化技巧以及超参数调整等方面的优化措施。通过这些策略的综合运用,可以显著提高模型的准确性,降低过拟合风险,并缩短训练时间,为AI领域的研究者和工程师提供有价值的参考。

热门文章

最新文章