当前位置: 首页 > news >正文

创建 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文件)

相关文章:

创建 MFC DLL-使用DEF文件

本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系本人将于及时删除 利用“MFC动态链接库”项目模板可以创建MFC DLL。DLL文件与可执行文件非常相似,不同点在于DLL包含有导出表(Export Table)。导出表包含DLL中每个导出函数的名字…...

如何将HTTP升级成HTTPS?既简单又免费的方法!

在当今数字化时代,网络安全已成为用户和企业关注的焦点。HTTPS作为一种更加安全的网络通信协议,正逐渐取代传统的HTTP成为新的标准。对于许多网站管理员和内容创作者来说,如何免费升级到HTTPS是一个值得探讨的问题。本文将详细介绍一些免费的…...

数据仓库之核心模型与扩展模型分离

在数据仓库的设计和实施过程中,核心模型与扩展模型分离是一种常见的策略,旨在提高数据仓库的灵活性、可维护性和扩展性。这种分离策略的主要优势和实施方法如下: 核心模型(Core Model) 核心模型是数据仓库中稳定、共…...

大龄职场人的春招机遇:技术岗位主导,高薪与挑战并存

随着6月毕业季的临近,大批年轻人即将涌入人才市场,为职场注入新鲜血液。然而,这也意味着一些职场人可能面临被“优化”的风险。近几年,职场环境呈现出明显的年轻化趋势,企业更倾向于招聘具有创新活力的青年人才&#x…...

家宽动态公网IP,使用docker+ddns 实现动态域名解析

官方地址:https://github.com/jeessy2/ddns-go 安装docker docker pull jeessy/ddns-godocker run -d --name ddns-go --restartalways --nethost -v /opt/ddns-go:/root jeessy/ddns-go然后访问ip端口 配置时注意如下...

【力扣刷题 动态规划】LeetCode 139 单词拆分、LeetCode 300 最长递增子序列 ✌

文章目录 1. 单词拆分2. 最长递增子序列 1. 单词拆分 题目链接 &#x1f34e; 解题思路&#xff1a; class Solution {bool dp[310] {false};public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> myset;for(auto& str :…...

【位运算】【前缀和】个人练习-Leetcode-1177. Can Make Palindrome from Substring

题目链接&#xff1a;https://leetcode.cn/problems/can-make-palindrome-from-substring/description/ 题目大意&#xff1a;给出一个字符串s&#xff0c;每次query给出l, r, k&#xff0c;要求判断子串s[l:r1]在经过k次操作后是否能变为回文串。一次操作可以将子串内的一个字…...

最小相位系统

最小相位系统 1、传递函数 一个线性系统的响应。 比如一个RC低通滤波器&#xff1a; 交流分量在电容的充放电中被滤除掉&#xff0c;通过设置电容器的电容值&#xff0c;以及电阻值&#xff0c;能够控制这种滤除能力&#xff0c;这个参数为RC。 电容的电抗为 1 / j w C 1/j…...

css系列:进度条

前言 技术来源于需求&#xff0c;近期遇到了做语音的需求&#xff0c;有个调整语速和音量的进度条&#xff0c;UI组件库的进度条大部分不支持拖动和点击修改当前进度&#xff0c;所以自己手写了一个。 实现思路 MDN文档介绍 <input type"range"> - HTML&am…...

QT中为程序加入超级管理员权限

QT中为程序加入超级管理员权限 Chapter1 QT中为程序加入超级管理员权限1. mingw编译器2. MSVC编译器3. CMAKE Chapter2 如何给QT程序添加管理员权限(UAC)的几种方法1、Qt Creator中方案一&#xff1a;&#xff08;仅适用于使用msvc编译器&#xff09;方案二&#xff1a;&#x…...

共识算法之争(PBFT,Raft,PoW,PoS,DPoS)

文章目录 共识算法拜占庭容错技术&#xff08;Byzantine Fault Tolerance&#xff0c;BFT&#xff09;PBFT&#xff1a;Practical Byzantine Fault Tolerance&#xff0c;实用拜占庭容错算法Raft协议POW(Proof of Work)工作量证明机制POSDPoS&#xff08;Delegated Proof of St…...

抽象的java入门1.3.0

前言&#xff1a; 在1.2.0版本中我们介绍了public class hello {}并从中提取出两个新概 修饰符和作用域 public class hello {public static void main(String[] args) {System.out.println("Hello World");} } 正片&#xff1a; 这一期把剩余的内容刨析出来 pub…...

【Oracle生产运维】表空间可用性告警排查处理

1 前言 在生产环境中&#xff0c;一般设置表空间告警阈值是90%&#xff0c;在接到监控报警后&#xff0c;并不是需要立刻对表空间进行扩容。 决定是否扩容主要看表空间最近的增量是多少&#xff0c;假如剩余10%的空间还能支持1个月的增量&#xff0c;那就不需要急着扩容。如果…...

mac Network: use --host to expose

本地启动无法访问&#xff0c;这个不是权限问题是mac 主机端口安全策略&#xff0c;现在我们只需要开启端口自动检测就可以 npm run dev --host 网络&#xff1a;未暴露 方案一 1、执行 npm run dev -- --host 方案二 1、请在 vite.config.js server: {host: true } 1…...

ChatGPT-4o体验demo

OpenAI 最近推出了其最新的人工智能语言模型——GPT-4O。该模型是在原有 GPT-4 的基础上进行优化而成&#xff0c;旨在提升生成质量和响应速度。GPT-4O 采用了更加高效的架构设计&#xff0c;使其在处理复杂文本时表现出更快的速度和更高的准确性。GPT-4O 在训练过程中融入了最…...

FPGA SPI采集ADC7606数据

一,SPI总线的构成及信号类型 SPI总线只需四条线(如图1所示)就可以完成MCU与各种外围器件的通讯: 1)MOSI – Master数据输出,Slave数据输入 2)MISO – Master数据输入,Slave数据输出 3)SCK – 时钟信号,由Master产生 4)/CS – Slave使能信号,由Master控制。 在一个SPI时…...

html three.js 引入.stl模型示例

1.新建一个模块用于放置模型 <div id"chart_map" style"width:800px;height:500px"></div> 2. 引入代码根据需求更改 <!-- 在head或body标签内加入以下链接 --> <script src"https://cdn.jsdelivr.net/npm/three0.137/build/t…...

从零手写实现 nginx-11-文件处理逻辑与 range 范围查询合并

前言 大家好&#xff0c;我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的&#xff0c;可以参考我的另一个项目&#xff1a; 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …...

Java算法-力扣leetcode-167. 两数之和 II - 输入有序数组

给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 ****非递减顺序排列 ** &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 < n…...

实战 | YOLOv10 自定义数据集训练实现车牌检测 (数据集+训练+预测 保姆级教程)

导读 本文主要介绍如何使用YOLOv10在自定义数据集训练实现车牌检测 (数据集训练预测 保姆级教程)。 YOLOv10简介 YOLOv10是清华大学研究人员在Ultralytics Python包的基础上&#xff0c;引入了一种新的实时目标检测方法&#xff0c;解决了YOLO以前版本在后处理和模型架构方面…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...