创建 MFC DLL-使用DEF文件

news2025/3/15 0:11:18

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

利用“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.coloradmin.cn/o/1790271.html

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

相关文章

vue3 todolist 简单例子

vue3 简单的TodList 地址: https://gitee.com/cheng_yong_xu/vue3-composition-api-todo-app-my 效果 step-1 初始化项项目 我们不采用vue cli 搭建项目 直接将上图文件夹,复制到vscode编辑器,清空App.vue的内容 安装包 # 安装包 npm…

css动态导航栏鼠标悬停特效

charset "utf-8"; /*科e互联特效基本框架CSS*/ body, ul, dl, dd, dt, ol, li, p, h1, h2, h3, h4, h5, h6, textarea, form, select, fieldset, table, td, div, input {margin:0;padding:0;-webkit-text-size-adjust: none} h1, h2, h3, h4, h5, h6{font-size:12px…

【c++入门】函数重载,引用,内联函数,auto

函数重载 函数重载概念 什么是函数重载? 函数重载:是函数的一种特殊情况,C允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类…

3D开发工具HOOPS助力PLM/PDM系统创新,高效实现复杂数据精细处理、3D模型交互可视化!

在现代制造和工程领域,PLM(产品生命周期管理)和PDM(产品数据管理)已成为企业优化流程和提升竞争力的关键工具。 随着技术的飞速发展,PLM和PDM应用程序需要更先进的工具来处理复杂的CAD数据、实现高效的3D可…

揭秘!宠物空气净化器对抗猫毛过敏,效果真的超乎想象?

猫毛过敏困扰着不少爱猫人士。尽管网络上充斥着各种缓解策略,但究竟哪种方法效果最佳?作为一位经验丰富的宠物主人,我搜集了大量信息,对比了几种主流的猫毛过敏应对策略,比如药物治疗、日常清洁和宠物空气净化器的使用…

电子凭证3.0,助力企业实现报销自动化

在数字化浪潮汹涌澎湃的今天,企业对于高效、便捷、安全的财务管理需求日益凸显。传统的报销流程繁琐、耗时,不仅增加了企业的运营成本,还影响了员工的工作效率和满意度。用友BIP电子凭证3.0的发布,无疑为企业实现报销自动化提供了…

Nginx配置详细解释

文章目录 一、配置详细解释关闭版本修改启动的进程数cpu与work进程绑定nginx进程的优先级work进程打开的文件个数event事件 二、Http设置协议配置说明mime虚拟主机aliaslocationaccess模块验证模块自定义错误页面自定义日志存放位置try_files检测文件是否存在长连接 一、配置详…

Android Studio插件开发 - Dora SDK的IDE插件

IDE插件开发简介 Android Studio是一种常用的集成开发环境(IDE),用于开发Android应用程序。它提供了许多功能和工具,可以帮助开发人员更轻松地构建和调试Android应用程序。 如果你想开发Android Studio插件,以下是一…

计算病理学的视觉语言基础模型| 文献速递-视觉通用模型与疾病诊断

Title 题目 A visual-language foundation model for computational pathology 计算病理学的视觉语言基础模型 01 文献速递介绍 数字病理学的快速普及和深度学习的进步使得可以开发出针对各种疾病和患者群体的各种病理学任务的强大模型。然而,由于医学领域标签…

解锁破解2024最新版会声会影,序列号注册码大揭秘!

会声会影2024是一款专业的视频编辑软件,它为用户提供了丰富的功能和工具,让用户能够轻松地制作出精美的视频作品。如果你是一位热爱视频制作的朋友,那么你一定不能错过这款软件。本文将为大家介绍会声会影2024的序列号注册码以及如何购买和使…

安徽某高校数据挖掘作业4-5 (与一些碎碎念)

1. 编写程序求函数、、的极限。 解答: import sympy as sp# 定义符号变量 x x sp.symbols(x)# 定义函数 f1 sp.sin(20 * x) / x f2 (1 4 * x)**(2 / x) f3 (1 4 / x)**(2 * x)# 计算极限 limit1 sp.limit(f1, x, 0) limit2 sp.limit(f2, x, 0) limit3 sp…

文件上传漏洞之upload-labs

前提: 本文中的以xshell命名的均为以密码为admin的一句话木马,而shell命名的则是由冰蝎工具生成的木马。 pass-01:js前端验证 测试性的上传一个一句话木马,发现被拦截了,而且根据推测大概率是前端检测,于…

开发人员申请Claude API Key教程:轻松获取Claude 3模型API Key并开发部署自己的Claude 3聊天应用

开发者如何申请并使用ClaudeAPI开发部署自己的Claude 3聊天应用 ClaudeAPI是由Anthropic公司开发的一款基于Claude模型的自然语言处理API服务。它可以帮助开发者在自己的应用中集成先进的自然语言理解和生成能力。本文将介绍如何申请和使用ClaudeAPI。 一、注册Anthropic账号 …

订单排队与链动模式塑造社交电商新格局

在数字化浪潮中,社交电商凭借其独特的魅力与潜力,正逐渐崭露头角。本文将解读一种融合了订单排队与链动模式的创新商业模式。这一模式旨在通过提高消费者复购率,优化销售流程,从而推动销售增长,塑造社交电商新生态。 …

【栈】736. Lisp 语法解析

本文涉及知识点 栈 LeetCode736. Lisp 语法解析 给你一个类似 Lisp 语句的字符串表达式 expression,求出其计算结果。 表达式语法如下所示: 表达式可以为整数,let 表达式,add 表达式,mult 表达式,或赋值的变量。表达…

Nacos注册中心 --学习笔记

Nacos注册中心是什么? 想象一下一个繁忙的购物中心,里面有很多商店,每个商店都在某个位置提供不同的商品或服务。这个购物中心有一个信息台,人们可以在这里查询任何商店的位置和提供的服务。等到有新的商店开张,或者现…

运维工具 - SFTP 和 FTP 的区别?

SFTP 和 FTP 的区别有三点 连接方式 SFTP 是在客户端和服务器之间通过 SSH 协议建立的安全连接来传输文件,而 FTP 则是 TCP 端口 21 上的控制连接建立连接。 安全性 SFTP 使用加密传输认证信息来传输数据,因此 SFTP 相对于 FTP 更安全的。 效率 SF…

DevOps全面综述:从概念到实践

一、背景与概述 1.1 DevOps的起源与发展 DevOps(Development and Operations的缩写)是软件工程领域中的一种文化和实践方法,旨在促进开发团队与运维团队之间的协作,从而实现更高效、更可靠的软件交付。DevOps起源于敏捷软件开发方…

应届生毕业择业必看!这三个朝阳行业错过就晚了!2024普通人赚钱的行业、2024最适合创业的项目

俗话说“男怕入错行,女怕嫁错郎”。尤其是对于现在的年轻人来说,一个好的处于上升期的行业,所能带来的收益是无法估量的。所以在这个大学生即将步入社会的毕业季,我们一起看看国家统计局发布的这份数据报告,来分析哪些…

机器学习18个核心算法模型

1. 线性回归(Linear Regression) 用于建立自变量(特征)和因变量(目标)之间的线性关系。 核心公式: 简单线性回归的公式为: , 其中 是预测值, 是截距, 是斜…