使用vs2019实现mfc类库dll的开发
最近项目中遇到一个问题,就是需要把我开发的设备生成dll文件给师弟用于软件的开发。设备程序的框架是在mfc中实现的,里面有一个设备类,可用于控制算法的实现,并获得一些设备的参数。现在记载这一个类软件接口的开发方法。
1)打开vs2019,创建一个mfc动态链接库。
图1 mfcdll项目的创建
可以看到,此时系统已经自动创建了一个MFC项目,其中CmdeviceApp类为整个程序类,CmdeviceApp::InitInstance()则是程序的入口函数。在原有项目的文件中,CmdeviceApp下还有一个CmdeviceDlg类,用于实现控制面板的开发。设备类devicetest则是在Cmdeivcedlg下的对象。我们目前的需求是对设备类devicetest进行封装,并暴露接口给到软件开发人员(客户)。使得客户只需要调用函数接口就可以对设备进行操作,不需要进行类的创建等。
2)将设备类devicetest及其子类放到vcxproj文件所在文件夹中,经过调试成功实现devicetest类的编译
3)新建一个DeviceWrapper.h和DeviceWrapper.cpp文件,内容分别如图2和图3所示。DeviceWrapper.h包含待封装的设备类作为头文件,并包含需要暴露给客户的接口(用__declspec(dllexport)表示)。 编译时,需要将待编译的接口用extern"C"包含,因为C++的编译方式会考虑函数重载,实际的编译后函数名称可能会与所需函数名完全不同。DeviceWrapper.cpp文件将待封装的设备类构造成一个全局变量,并对接口函数进行定义,定义时就会用到类全局变量的成员函数。
#pragma once
#ifndef SIMULATOR_H_
#define SIMULATOR_H_
#include "Devicetest.h"
#ifdef SMTAPI
#define SMTAPI _declspec(dllimport)
#else
#define SMTAPI _declspec(dllexport)
#endif#if(defined(WIN32)|defined(WIN64))&!defined(WINCE7)
#define SMTAPIENTRY _stdcall
#else
#define SMTAPIENTRY
#endif#ifdef __cplusplus
extern "C" { //防止函数名字改编,用extern"C"
#endifSMTAPI int SMTAPIENTRY smtopen();#ifdef __cplusplus
}
#endif#endif
图2 DeviceWrapper.h代码段
#include "stdafx.h"
#include "DeviceWrapper.h"Devicetest* m_simulator = new Devicetest;
CString tt_port("portA");
SMTAPI int SMTAPIENTRY smtopen()
{m_simulator->PFDConnect(tt_port);if (m_simulator->fConnect){return 1;}elsereturn -1;
}
图3 DeviceWrapper.cpp代码段
4)在m_device.cpp文件中包含DeviceWrapper.h文件,生成解决方案。此时就可以在项目的Debug文件夹中发现封装好的 m_device.dll和m_device.lib文件。
5)使用函数的接口时,只需要把封装好的 m_device.dll、m_device.lib和DeviceWrapper.h文件以及原有设备类子类的dll文件放入客户的vcxproj文件夹中,将lib文件放入附加依赖项,将图2 DeviceWrapper.h文件_declspec(dllexport)改为_declspec(dllimport) ,用户就可以直接调用函数接口操作设备,而设备类的创建由dll和lib文件自动实现。
使用vs2019实现mfc类库dll的开发相关推荐
- VC++动态链接库(DLL)编程(四)――MFC扩展 DLL
VC++动态链接库(DLL)编程(四) ――MFC扩展 DLL 作者:宋宝华 e-mail:21cnbao@21cn.com 前文我们对非MFC DLL和MFC规则DLL进行了介绍,现在开始详细 ...
- 多线程编程之二——MFC中的多线程开发
五.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消息机制,通常 ...
- VC++6 开发MFC扩展DLL以及MFC DLL可以包含界面
VC环境可以开发win32 DLL和MFC DLL:下面来开发一个MFC DLL:Win7, VC6: 新建一个MFC exe工程:名为mfcddd:在同级目录下新建一个文件夹,名为mfcbin: 默 ...
- MFC三大dll使用总结
DLL指的是动态链接库(Dynamic Link Library),它是一个可以被多个应用程序(甚至是不同语言编写的应用程序)同时调用的可执行二进制文件,是一个可共享的库.DLL是建立在客户/服务器通 ...
- MFC下DLL编程(图解)
DLL(Dynamic Link Library,动态链接库)是微软公司为Windows和OS/2操作系统设计一种供应用程序在运行时调用的共享函数库.DLL是应用程序的一种扩展,也是软件共享和重用的传 ...
- MFC 类库结构 总结
MFC主要类库结构总结 MFC类主要分为应用程序结构类.窗口支持类.图书设备类.模版集合类.简单数据类型类以及全局AFX函数等6个类. 1. 应用程序结构类 应用程序结构类代表的是应用程序的 ...
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-实现字典的打印...
系列回顾 从上一篇文章一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-实例一个模块(商品字典)开始我带领大家进入WinForm篇,并且使用示例的形式详细的演示了数据 ...
- VC++动态链接库(DLL)编程(三)――MFC规则DLL
VC++动态链接库(DLL)编程(三) ――MFC规则DLL 作者:宋宝华 e-mail:21cnbao@21cn.com 第4节我们对非MFC DLL进行了介绍,这一节将详细地讲述MFC规则DLL ...
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-在UI中应用DataUIMapper组件...
系列回顾 WinForm篇我用了一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-实例一个模块(商品字典)和一步一步教你使用AgileEAS.NET基础类库进行应用开 ...
- Building MFC application with /MD[d] (CRT dll version)requires MFC shared dll version~~~~
转自:http://www.byywee.com/page/M0/S530/530822.html 昨天编译文件时出现了Building MFC application with /MD[d] (CR ...
最新文章
- OpenStack环境搭建(五:附加项虚拟机文件备份使用)
- 简陋,山寨,Everything,桌面搜索,原理,源码
- LeetCode之Reverse String II
- 部署到Maven中央存储库
- 排序算法:归并排序算法实现及分析
- php中头部含义,PHP 常用的header头部定义汇总大全
- 6-2 是否二叉搜索树 (25 分)
- MySQL数据库查询重复数据办法
- 静态初始化中不能放入繁重计算,否则会变慢!
- 新高考成绩分析教师增值评价系统1:新高考等级赋分转换
- 数据库建表操作SQL代码大全
- 分布式任务调度相关介绍
- Xenu软件检查网站死链接
- 如何进阶为数据科学家
- APR协议及RARP协议
- 《机器学习实战》——第3章 决策树
- ACM顶会CIKM 2022放榜!度小满AI Lab三篇入选
- 【调剂】航天科工四院四部2023年度自培研究生开始调剂啦!!!
- 微信小程序突然多了好多动态_让微信小程序的登陆页面有云朵悬浮的动态效果...
- 易语言如何防止进程被终止或者如何隐藏进程
热门文章
- list 排序 java_java 怎么将List里面数据排序?
- qstringlist格式怎么写到txt_怎样把PDF转成TXT呢?
- pythonddos防御_一个自动封IP防御DDOS脚本
- VI编辑器将//替换为#
- 面向对象三大特性之——继承
- 乌班图服务器系统网卡驱动,Linux_Ubuntu系统无法衔接网络 该怎样安装无线网卡驱动?,ubuntu已经很好的兼容了主流的 - phpStudy...
- 转存文章— 网游加速器实现原理解析
- alidoing --使用JS实现多语言框架、喜欢的请进、、瓦特平台!
- PhalApi视频教程
- 微信小程序远程git代码管理