[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”,说白了就是将包含文件换个位置

目录
相关文章
Halcon区域region的生成,使用点坐标
Halcon区域region的生成,使用点坐标
1020 0
|
7月前
|
存储 弹性计算 安全
ECS与VPS技术角力:从算力成本到免备案雷区,企业服务器选型合规指南
在数字化浪潮中,服务器选择至关重要。ECS(云服务器)和VPS(虚拟专用服务器)是热门选项。ECS基于云计算,提供高可用性和弹性伸缩,适合大型项目;VPS通过分割物理服务器实现资源独立,成本较低,适合小型应用。两者在网络、存储及计算性能上各有优劣,需根据需求选择。国内并不存在合法的免备案服务器,建议严格遵守法规,确保网站合法运营。
298 3
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
540 1
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
|
8月前
|
机器学习/深度学习 文件存储 异构计算
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v2,加速训练,快速收敛
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v2,加速训练,快速收敛
157 1
|
8月前
|
JSON 监控 API
速卖通商品列表接口(速卖通API系列)
速卖通提供商品列表API,开发者可通过关键词、类目、价格范围等条件获取商品标题、价格、销量等基本信息。使用前需注册开发者账号、创建应用并授权获取access_token。Python示例代码展示了如何调用接口,返回JSON格式数据,包含商品列表、总数、页码等信息。应用场景包括商品监控、数据分析和个性化推荐。注意API会更新,请参考官方文档。
|
边缘计算 运维 Kubernetes
大规模 IoT 边缘容器集群管理的几种架构 -4-Kubeedge
大规模 IoT 边缘容器集群管理的几种架构 -4-Kubeedge
|
机器学习/深度学习 数据采集 人工智能
构建高效AI模型:深度学习优化策略和实践
【5月更文挑战第26天】 在人工智能的浪潮中,深度学习作为一项核心技术,其模型构建与优化一直是研究的热点。本文旨在探讨如何通过一系列创新性的优化策略提升深度学习模型的性能及效率。我们将从理论与实践两个维度出发,详细阐述包括数据预处理、网络结构设计、损失函数选择、正则化技巧以及超参数调整等方面的优化措施。通过这些策略的综合运用,可以显著提高模型的准确性,降低过拟合风险,并缩短训练时间,为AI领域的研究者和工程师提供有价值的参考。
|
数据采集 数据库连接 调度
从菜鸟到大师:掌握Python asyncio库,并发编程不再是梦!
【7月更文挑战第10天】Python的asyncio库简化了异步编程,通过事件循环和协程实现非阻塞I/O,提升效率。从`async def`定义异步函数到`await`等待操作,如在`main`函数中并发调用`say_hello`。深入学习涉及自定义协程、异步上下文管理器和信号量。结合如aiohttp,能构建高性能并发应用,实现高效的Web服务。开始你的asyncio之旅,成为并发编程专家!**
225 0
|
算法 关系型数据库 编译器
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目(一)
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目
463 0
|
Java
JSP之Web组件复用
JSP之Web组件复用
537 0
JSP之Web组件复用