创建 MFC DLL-使用DEF文件

本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系本人将于及时删除

利用“MFC动态链接库”项目模板可以创建MFC DLLDLL文件与可执行文件非常相似,不同点在于DLL包含有导出表(Export Table)。导出表包含DLL中每个导出函数的名字,这些函数是进入DLL的入口点。只有导出表中的函数可以被外部程序调用。

MFC DLL中导出函数常用以下两种方法:使用模块定义文件(.def和使用关键字_declspec(dllexport)

DEF文件是一个包含EXE文件或DLL文件声明的文本文件。每个DEF文件至少必须包含LIBRARY语句和EXPORTS 语句,其他语句可以省略。

DEF文件常用的模块语句如下:

Ø 第一个语句必须是 LIBRARY 语句 ,这个语句指出 DLL 的名字,链接器将这个名字放到 DLL 导入库中, DLL 导入库包含了指向外部 DLL 的函数索引指针。
Ø EXPORTS 语句列出被导出函数的名字, 以及导出函数的数值(由 @ 号与数字构成)。序数值可以省略,编译器会为每个导出函数指定一个,但这样指定的值不如自己指定的明确。
Ø 使用 DESCRIPTION 语句描述 DLL 的用途,这个语句可以省略。
Ø 使用 开头的注释语句。
注意:使用“ MFC 动态链接库”项目模板创建一个 MFC DLL 时, Ap 向导将创建一个 DEF 文件的框架,并自动添加到项目中。建立 DLL 时,链接器使用 .def 文件来创建一个导出文件( .exp )和一个导入库文件( .lib ),然后使用导出文件来创建 . dll 文件。

9.1】创建一个计算正方形和圆的面积的MFC 常规DLL的动态连接库MFCLibraryDll。

(1) 启动Visual Studio IDE,创建一个解决方案。

(2) 使用“MFC动态链接库”项目模板,在解决方案中新建一个名为MFCLibraryDll的MFC动态链接库项目。

单击“下一步”按钮后进入“MFC DLL类型”设置窗口,如图所示。本例采用默认设置,单击“确定”按钮,向导自动生成相关的文件和资源。

选择IDE的“解决方案资源管理器”视图窗口,可以看到向导生成的文件。在头文件夹里有MFCLibraryDll.h文件,在源文件夹里有MFCLibraryDll.cpp文件,可以在MFCLibraryDll.h文件里添加自定义函数的原型,在MFCLibraryDll.cpp文件中定义函数。此外,在源文件夹里还有一个MFCLibraryDll.def文件。如图所示。

(3) 在动态链接库中添加两个函数AreaEllipse()AreaSquare (),分别实现计算正方形和圆的面积的功能。

Ø 在MFCLibraryDll.h文件中添加函数原型
extern "C" double AreaEllipse(double r);extern "C" double AreaSquare(double x);
Ø 在Regulardll.cpp文件中实现函数
extern "C" double AreaEllipse(double r)
{return 3.1415926*r*r; 
}extern "C" double AreaSquare(double x)
{return x*x;  
}  

(4) 在MFCLibraryDll.def文件中声明需要导出的函数

第一个语句必须是LIBRARY语句,这个语句指出DLL的名字,链接器将这个名字放到DLL导入库中,DLL导入库包含了指向外部DLL的函数索引指针。

AreaEllipse @1
AreaSquare  @2

(5) 编译、链接程序,生成了以.dll为后缀的动态链接库Regulardll.dll

找到项目MFCLibraryDll所在的路径,在Debug文件夹下会看到生成的动态链接库MFCLibraryDll.dll和MFCLibraryDll.lib,如图所示。(解决方案下的Debug文件)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/22826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年5月份架构师考试案例真题完整版

案例分析: 今年的案例题 第一个必选题是 系统架构评估,文老师是押中了。 案例一:系统架构评估 1. 简述微服务架构 对比单体架构和微服务架构 微服务架构的优缺点。(7分) 答:微服务架构是一种分布式系统架构,将一个应用…

特征交叉系列:FM和深度神经网络的结合,DeepFM原理简述和实践

从FM,FFM到DeepFM 在上两节中介绍了FM和FFM 这两种算法是推荐算法中经典的特征交叉结构,FM将特征交叉分解到底层属性,通过底层属性的点乘来刻画特征交叉的计算,而FFM引入特征域的概念,对不同的特征对所引用的底层属性…

React中实现大模型的打字机效果

React 想实现一个打字机的效果,类似千问、Kimi 返回的效果。调用大模型时,模型的回答通常是流式输出的,如果等到模型所有的回答全部完成之后再展示给最终用户,交互效果不好,因为模型计算推理时间比较长。本文将采用原生…

SD3303A 大功率高亮度LED驱动芯片IC

一般描述 SD3303A是一款大功率高亮度LED驱动芯片,可以提供1A的电流驱动3W的LED。具有高效率,低功耗等特点,适用于电池供电的LED照明设备。 SD3303A具有开路保护和过温保护。 SD3303A需要使用两颗10uF(或者更大)的瓷片电容,来保…

AI大模型+产品经理:打造智能产品的黄金组合

前言 当我们谈论AI大模型与产品经理的结合,不仅仅是技术与创意的碰撞,更是对未来智能生活的期待。想象一下,当产品的灵魂被注入智能的血液,它们将成为我们生活中不可或缺的伙伴。 我们不仅仅是要探索AI大模型的深层技术&#xf…

深度缓冲技术在AI绘画中的魔法

随着人工智能技术的飞速发展,AI绘画已经成为艺术创作领域中的一个热门话题。从数字滤镜到复杂的图像生成算法,AI绘画正以前所未有的方式拓展着艺术的边界。在这个过程中,深度缓冲技术扮演了一个不可或缺的角色,它不仅提升了AI绘画…

103、python-第三阶段-13-大数据分布式集群运行

hadoop集群 4个多G的数据在集群中用了2.9分钟,如果在一个机器上运行大概需要十几分钟,所以集群速度还是很快的。

美国年轻人热衷床上“摆烂”,沃尔玛发掘床上用品新商机!

美国年轻人近年来热衷于床上“摆烂”生活方式,这反映了他们对舒适放松的追求和现代生活的压力。沃尔玛作为零售业巨头,敏锐地捕捉到这一市场变化,发现了床上用品的新商机。 美国年轻人忙碌中渴望宁静空间。床成为他们放松、逃离现实压力的理想…

PPT的文件怎么做二维码?适合多种文件使用的二维码制作技巧

现在很多人会将ppt文件转换成二维码之后,分享给其他人查看,比如常见的有学习资料、作品展示、个人简历、方案计划等内容都可以通过生成二维码的方式来提供展示。通过手机扫码就能够快速预览文件内容,与使用邮箱或网盘传输相比,更加…

电器公司2套PROE如何满足20人使用?

电器公司的日常运营高度依赖于各类软件工具,其中PROE作为广泛应用于产品设计领域的软件,在电器厂公司的生产流程中扮演着举足轻重的角色。如何合理配置和管理PROE软件资源,以满足20人同时使用的需求,是许多电器厂公司面临的实际问…

Hadoop3:MapReduce之MapTask的FileInputFormat的切片原理解读(2)

Job那块的断点代码截图省略,直接进入切片逻辑 参考:Hadoop3:MapReduce之MapTask的Job任务提交流程原理解读(1) 4、FileInputFormat切片源码解析 切片入口 获取切片数 获取最大和最小切片数 判断文件是否可以切片&…

PHP实现抖音小程序用户登录获取openid

目录 第一步、抖音小程序前端使用tt.login获取code 第二步、前端拿到code传给后端 第三步、方法1 后端获取用户信息 第四步、方法2 抖音小程序拿到用户信息把用户信息传给后端 code2Session抖音小程序用户登录后端文档 第一步、抖音小程序前端使用tt.login获取code 前端 …

“Apache Kylin 实战指南:从安装到高级优化的全面教程

Apache Kylin是一个开源的分布式分析引擎,它提供了在Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力,支持超大规模数据的亚秒级查询。以下是Kylin的入门教程,帮助您快速上手并使用这个强大的工具。 1. 安装Kylin Apache Kylin的安装是一个关键步骤,它要求您具备一…

linux--------线程的同步和互斥

前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、线程互斥 (1)互斥: 任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用 要了解互…

XStream反序列化

XStream反序列化 前言基础重要组件MarshallingStrategy编码策略两个重要类 MapperConverterDynamicProxyConverter XStream编组/解组具体过程测试代码fromXML解组toXML编组总结 XStream漏洞漏洞原理sorted-set触发环境和版本限制复现调试分析总结各种版本<1.3.11.4-1.4.41.4…

SD6210A 低噪声可调电荷泵DC/DC转换器芯片IC

一般描述 该SD6210A是一种低噪声&#xff0c;恒定频率(1.20MHz)开关电容电压倍增器。它产生一个调节输出电压从2.8V到5V的输入与高达250mA的输出电流。低外部零件数(一个飞行电容器和两个小旁路电容的VIN和VOUT)使SD6210A非常适合小型&#xff0c;电池供电的应用新的电荷…

Java面试题:解决Redis缓存击穿问题

缓存击穿 当一个key过期时,需要对这个key进行数据重建 在重建的时间内如果有大量的并发请求进入,就会绕过缓存进入数据库,会瞬间击垮DB 重建时间可能因为数据是多个表的混合结果需要分头统计而延长,从而更容易出现缓存击穿问题 缓存击穿的解决方案 添加互斥锁 先查询缓存…

Excel 每 N 行拼成一行

F列每四行对应一条记录&#xff1a; ABCDEF1NameAddressCityShort IDCompany 122222 al street3Blue cheese415Company 261111 arm rd7Ranch829Company 3103333 raindrop drive11Peanut123 需要把F列整理成规范表格&#xff0c;按行写入A-D&#xff1a; ABCDEF1NameAddressC…

Coolmuster iOS 数据擦除:隐私保护的终极方案

手机和平板电脑是我们不可或缺的伙伴&#xff0c;它们存储着我们的照片、联系人、私人消息以及工作文件。然而&#xff0c;当这些设备需要更换或者出售时&#xff0c;如何确保存储在其中的数据不被他人恢复和滥用&#xff0c;成为了一个严峻的问题。Coolmuster iOS 数据擦除&am…

Java(十)——内部类

文章目录 内部类静态内部类实例内部类匿名内部类局部内部类 内部类 Java内部类是一种特殊的类定义方式&#xff0c;它允许在一个类的内部定义另一个类。 内部类可以访问其所在外部类的成员变量和成员方法&#xff0c;这使得它非常适用于封装与外部类紧密相关的私有逻辑。 内…