搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
知新_RL
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Windows10彻底删除android studio_android studio产生的文件怎么彻底清除
2
【水果识别】基于深度学习卷积神经网络CNN实现水果识别分类附Matlab代码_卷积神经网络水果识别
3
小白怎么入门CTF,看这一篇就够了(内附学习笔记、靶场、工具包下载)_ctf竞赛入门指南
4
关于分布式计算的一些概念
5
Python--关于学生信息管理系统的课设
6
101个著名的管理学及心理学效应(2)_心理学 每个人干的加起来超过100%
7
Android开发——RadioButton控件_android radiobutton
8
golang和rust嵌入式开发初探_go 嵌入式开发
9
了解MySQL_mysql的描述
10
深入了解ChatGPT:原理、架构、发展与使用指南_chatgpt 架构
当前位置:
article
> 正文
关于MFC中DLL的制作和调用_mfc dll制作及调用
作者:知新_RL | 2024-06-08 17:34:06
赞
踩
mfc dll制作及调用
在做MFC程序的时候用到了DLL,所以查找总结了一下。
一. 制作DLL流程
为什么都没有段落符号与标号。。。
先创建DLL工程、类,编写DLL函数;编译链接产生DLL文件(普通工程产生的EXE文件,DLL产生的是DLL文件)。
此时DLL文件还不能调用。应用程序要想访问某个DLL中的函数,那么该函数必须是已经被导出的函数。查看DLL中有哪些导出函数可用命令行工具:Dumpbin。命令如下:dumpbin回车—>dumpbin -exports 文件名.dll回车。
这时可以看到没有导出函数。为了让DLL导出一些函数,需要在每一个将要被导出的函数前面加标识符: _declspc(dllexport)(如:_declspec(dllexport) add(int a, int b){})。再次编译链接后产生两个新文件。一个是文件名.lib,即引入库文件;另一个是文件名.exp,不重要。这时再用dumpbin命令查看,可以看到有了导出函数。
然后就可以调用DLL了,利用extern声明外部函数。编译链接调用函数。
编译通过,链接出错。因为找不到库文件。此时将文件名.lib复制到调用程序所在目录下,然后在VC中选择Project\Settings菜单命令,在打开的对话框中选择link选项卡,在Object\library module选项中输入文件名.lib。
再次build,这时可以用dunpbin -import 文件名.exe 来查看调用程序生成的exe文件的输入信息以及加载的DLL信息。
编译运行又出错了,这次是因为调用DLL文件不在调用目录中,也就是说它既不在该工程的执行目录中,也不在工程所在目录中(工程的执行目录是指写在工程配置中的目录,工程所在目录就是工程所在Debug文件夹),也不在系统目录中(system、system32等),也不在path环境变量包含的路径中(这四个路径是VC调用文件一次会先后遍历的几个路径)。将调用的DLL文件复制到该工程的Debug文件夹中即可。
二. 隐式调用DLL中函数的导入与导出
这部分内容,和上面的内容差不多,但主要出自《VC++深入详解》,其中更深入地对DLL的调用进行了分析和优化。上面的内容是最原始最基础的制作和导入导出原理,而以下则是在那基础上的进一步优化,添加了一个头文件。而在实际从VC中建立工程时,一切都是便利的,已经包含了的,头文件是现成的。只需要添加到调用DLL的工程中即可。
导出:编写好DLL文件之后,要想使用它的函数必须先进性导出,此时就要在函数定义前加 _declspec(dllexport);
导入:应用程序要想使用dll的函数必须在使用前利用extern声明外部函数,然后才能用。而这里的extern可以用 _declspec(dllimport)代替。两者相比,后者是调用动态链接库专用,编译器生成的代码更高效;
导入导出的说明的添加可以一次性完成,这个方法就是创建一个头文件。DLL中需要 _declspec(dllexport),则在dll中#define DLL_API _declspec(dllexport),然后#include “头文件名.h”调用该头文件,而头文件中函数的声明前添加DLL_API即可。应用中需要 _declspec(dllimport),则在头文件中#ifdef DLL_API #else #define DLL_API _declspec(dllimport),然后在应用cpp中 #include “头文件名.h”调用该头文件即可。利用头文件将 _declspec(export)和 _declspec(import)的添加都归集到头文件中,DLL文件和应用文件中的具体函数实现和引用就不需要再添加了。
注意:a.此方法是将引用声明变为了预编译指令,极大地简化了引用过程;
b.头文件的另一个好处是将动态库的函数提前做了声明,这样可以让使用者直观明了地知道动态库中的个中函数功能;
c.头文件也需要和.lib、.dll、一同添加到应用程序文件夹中,头文件不是添加到配置中而是引入到工程中;
过程图解:图解做不出来。。。。改天上图吧。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/知新_RL/article/detail/690564
推荐阅读
article
手机
安装
青龙
面板
,
低功耗
,
随时随地
的薅羊毛(无需
服务器
)...
(无需购买
服务器
)自从
手机
安装
好
青龙
面板
之后
,
就完全抛弃电脑版
青龙
面板
。_
青龙
面板
青龙
面板
电脑...
赞
踩
article
[
个人
总结
]-
java
常用
方法
...
user.dir是一个系统属性,表示用户当前的工作目录,大多数情况下,用户的当前工作目录就是
java
项目的根目录(src...
赞
踩
article
两个
单向
链表
是否
相交
汇总...
投了腾讯IOS客户端开发岗,结果面试官大大问了一堆操作系统,数据结构,算法,计算机网络问题,orz,给大神跪了!最后问大...
赞
踩
article
GPT
-4
o
屠龙式震撼!多模态、实时
交互
、全员
免费
可用,丝滑
语音
交互
的 Chat
GPT
这把赢麻了...
推理能力创新高_
chatglm
gpt4
-
o
chatglm
gpt4
-
o
...
赞
踩
article
边缘
数据
采集
网关
为
企业
提供高效、安全、可靠的
数据
采集
解决方案-天拓四方...
同时,通过对
网关
采集
上来的
数据
进行分析,
企业
还能够发现生产过程中的瓶颈和问题,进一步优化生产流程和提高产品质量。传统的数...
赞
踩
article
2020-08-12 面试题 02.07.
链表
相交
_
基于
节点
的
引用
,
而不是
基于
节点
的
值...
面试题 02.07.
链表
相交
https://leetcode-cn.com/problems/intersection...
赞
踩
article
Eureka
和
Consul
两个
注册
中心
的
差异。...
但是,
Eureka
Server
的
实际剔除动作将在下次剔除间隔计时器执行时生效,也就是说,理论上最快也需要在租约到期后
的
...
赞
踩
article
Java中
根据
身份证
获取信息
_
java
根据
身份证
号
获取信息
...
Java中
根据
身份证
获取信息
,让你不再多写重复代码_
java
根据
身份证
号
获取信息
java
根据
身份证
号
获取信息
...
赞
踩
article
【
消息
循环
&
消息
泵
】
MFC
消息
循环
和
消息
泵
_
mfc
消息
泵
...
首先,应该清楚
MFC
的
消息
循环
(::GetMessage,::PeekMessage),
消息
泵
(CWinThread:...
赞
踩
article
自动化
测试
之
selenium
工具使用...
一个为减少
测试
工作的同行Jason Huggins同行通过js代码库开发的Firefox 启动复制代码Chrome启动复...
赞
踩
article
Kimi
精选
提示
词,总结
PPT
内容
_
kimi
常用
prompt
...
大家好,我是子云,最近真是觉得
Kimi
这个大模型,产品体验很棒,能力也是不错,感觉产品经理用心了。
Kimi
输入框可以配置...
赞
踩
article
工业
安全
智勇较量,
赛宁
网安
工业
靶场
决胜
工业
网络
攻防
对抗新战场...
除此之外,基于仿真环境构建
工业
自动化的对抗训练场景,实现
攻防
两端的对抗演练,让真实问题暴漏在仿真环境,加固提升工控系统网...
赞
踩
article
MFC
-核心类库-
CWnd
的
成员
函数
介绍(三)_
cwnd
默认刷新
函数
...
CRect类数据成员有left,top,right,和bottom。left左上角X坐标,top左上角Y坐标,right...
赞
踩
article
深入浅出
落地
应用
分析:AI
虚拟
数字
人
_ai
虚拟
人
社会...
数字
人
是通过计算机技术制作的类
人
形象或者软件制作的结果。它们具备
人
类的外貌或行为模式,但他们不是现实世界中的某个
人
的录像...
赞
踩
article
域
横向
移动分析_
minikatz
常见
错误
...
windwos内网横移学习笔记_
minikatz
常见
错误
minikatz
常见
错误
...
赞
踩
article
企业
数据
架构
和
集成
架构
规划方案(
PPT
)...
企业
数据
架构
可以识别跨功能
和
组织边界的可共享
和
冗余的
数据
,它可以让
数据
保持一个版本,最小化
数据
冗余、分散
和
错误,提升
数据
...
赞
踩
article
【算法】
AOE
网找
关键
活动
、
关键
路径
_
关键
路径
和
关键
活动
...
关键
路径
是什么?整个
活动
网影响整体耗时的
路径
。如果
活动
网没有任意一个分叉,所有节点连起来也为一条
关键
路径
。找
关键
路径
用于...
赞
踩
article
MySQL
8.0
版本在
CentOS
系统
安装
&&
修改
MySQL
的
root
密码
和允许
root
远程登录(介...
注意:
安装
操作需要
root
权限。_
centos7
安装
m
ysql
8并
修改
密码
ysql
8.0
community
serv...
赞
踩
article
Python
口罩
识别检测全网最全
OpenCV
训练
分类器
具体步骤(以
训练
口罩
检测
分类器
为例)附
分类器
和...
OpenCV
训练
分类器
Python
版本2贰进制-Echo日期:2021年3月目录1. 概述2.
数据
收集2.1 正样本2...
赞
踩
article
springboot
+
redis
实现
限流
再相约_
springboot
使用
l
redis
限流
...
使用
springboot
集成
redis
实现一个简单的
限流
功能。实现简单的
限流
可以通过自定义注解来实现,
限流
可以分为不同的...
赞
踩
相关标签
大数据
java
移动开发
操作系统
数据结构与算法
OpenAI
ChatGPT
GPT
GPT-4
GPT-4o
大模型
Sam Altman
边缘计算
物联网
其他
iot
eureka
consul
云原生
selenium
测试工具
powerpoint
chatgpt
gpt