MFC中使用Create或CreateDialog创建对话框失败,GetLastError错误码为1813(找不到映像文件中指定的资源类型)
文章目录
- 创建对话框失败示例、原因分析及解决方案
- 示例代码
- 错误原因
- 解决方案
- AFX_MANAGE_STATE(AfxGetStaticModuleState())作用
- 一、功能
- 1. 模块状态切换
- 2. 自动状态恢复
- 二、为什么要用该函数?
- 三、必须使用该宏的典型场景
- 1. MFC 扩展 DLL(Extension DLL)
- 2. 多线程调用 MFC 功能
- 3. COM 组件或 ActiveX 控件
- 4. 静态库中的 MFC 代码
- 四、不需要使用的情况
- 五、技术原理(伪代码)
- 六、常见问题与修复
- 问题 1:对话框显示空白
- 问题 2:DYNAMIC_DOWNCAST 失败
- 七、最佳实践
- 总结
- 在这里插入图片描述
创建对话框失败示例、原因分析及解决方案
示例代码
void ShowDlg()
{//CreateDialogHWND hWnd = CreateDialog(NULL, MAKEINTRESOURCE(IDD_DLG_SHOW), NULL, NULL);if (NULL == hWnd){DWORD dErr = ::GetLastError();//dErr=1813 找不到映像文件中指定的资源类型。}::ShowWindow(hWnd, SW_SHOW);//CreatemyDlg mDlg;BOOL bRet = mDlg.Create(IDD_DLG_SHOW);if (!bRet){DWORD dErr = ::GetLastError();//dErr=1813 找不到映像文件中指定的资源类型。}mDlg.ShowWindow(SW_SHOW);
}
错误原因
在 DLL 中加载资源(如对话框、字符串)时,必须确保使用正确的模块状态,否则可能加载错误的资源或失败。
解决方案
在创建对话框前增加:
AFX_MANAGE_STATE(AfxGetStaticModuleState());
那么AFX_MANAGE_STATE(AfxGetStaticModuleState())功能是什么呢,为什么要用该函数,哪些情况下需要使用?
AFX_MANAGE_STATE(AfxGetStaticModuleState())作用
AFX_MANAGE_STATE(AfxGetStaticModuleState())
是 MFC(Microsoft Foundation Classes)中一个关键的模块状态管理宏,用于在多模块应用程序(如涉及 DLL 的工程)中确保资源、消息映射和运行时类型信息的正确性。以下是详细解答:
一、功能
1. 模块状态切换
- MFC 使用模块状态(
AFX_MODULE_STATE
)跟踪当前代码所属的模块(如 EXE 主程序、DLL、插件等)。 - 模块状态包含:
- 资源句柄(用于加载对话框、图标、字符串等)
- 运行时类型信息(RTTI)
- 消息映射表
- 线程上下文信息
- 作用:在进入某个模块的代码时,临时切换到该模块的状态,确保其资源、消息和类型信息能被正确访问。
2. 自动状态恢复
- 该宏基于 RAII(资源获取即初始化)机制:
- 进入作用域时:将当前模块状态切换为目标模块(如 DLL 的模块状态)。
- 退出作用域时:自动恢复为之前的模块状态(如主程序的模块状态)。
二、为什么要用该函数?
在多模块 MFC 应用中,如果不显式管理模块状态,会导致以下问题:
-
资源加载错误
- 例如:DLL 中的代码尝试加载对话框资源时,可能错误地从主程序(EXE)的资源中读取,导致界面显示异常或崩溃。
- 示例:DLL 中定义的对话框资源 ID 与主程序冲突时,未切换状态会加载主程序的资源。
-
运行时类型信息(RTTI)失效
- MFC 的
DYNAMIC_DOWNCAST
或IsKindOf
可能因模块状态错误返回NULL
,导致类型转换失败。
- MFC 的
-
线程上下文问题
- 多线程环境下,若线程入口未设置模块状态,可能访问错误的资源或消息映射。
三、必须使用该宏的典型场景
1. MFC 扩展 DLL(Extension DLL)
- 场景:DLL 导出函数或类,且需要加载资源(如对话框、字符串)。
- 示例:
// DLL 导出的函数 void ShowDlgInDLL() {AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 切换到 DLL 的模块状态CMyDialog dlg;dlg.DoModal(); // 正确加载 DLL 中的对话框资源 }
- 未使用的后果:对话框可能加载主程序的资源(导致布局错乱),或直接崩溃。
2. 多线程调用 MFC 功能
- 场景:线程由 DLL 创建,并在其中使用 MFC 类或资源。
- 示例:
UINT MyThreadProc(LPVOID) {AFX_MANAGE_STATE(AfxGetStaticModuleState());CWinThread* pThread = AfxBeginThread(...); // 确保线程使用 DLL 的模块状态return 0; }
3. COM 组件或 ActiveX 控件
- 场景:MFC 实现的 COM 对象被外部进程调用时,需确保内部代码使用正确的模块状态。
- 示例:
STDMETHODIMP CMyCOM::Method() {AFX_MANAGE_STATE(AfxGetStaticModuleState());CString str = _T("Hello"); // 正确使用 DLL 的字符串资源return S_OK; }
4. 静态库中的 MFC 代码
- 场景:静态库被多个模块(EXE/DLL)调用时,需在调用入口切换状态。
四、不需要使用的情况
- 纯 EXE 项目:单模块应用程序无需切换状态。
- 非 MFC DLL:如纯 Win32 DLL,不涉及 MFC 资源或类。
- 同一模块内部调用:如 DLL 内部函数调用自身资源时,通常无需切换。
五、技术原理(伪代码)
// AFX_MANAGE_STATE 的简化实现
#define AFX_MANAGE_STATE(targetState) \AFX_MODULE_STATE* __prevState = AfxGetModuleState(); \ // 保存当前状态AfxSetModuleState(targetState); // 切换新状态// 作用域结束时自动调用析构函数恢复旧状态
六、常见问题与修复
问题 1:对话框显示空白
- 现象:DLL 中的对话框未显示预期内容。
- 原因:未切换模块状态,资源从主程序加载。
- 修复:在导出函数中添加
AFX_MANAGE_STATE
。
问题 2:DYNAMIC_DOWNCAST 失败
- 现象:
DYNAMIC_DOWNCAST(CMyClass, pObj)
返回NULL
。 - 原因:模块状态错误,导致 MFC 无法识别类信息。
- 修复:在调用前切换模块状态。
七、最佳实践
- 在 DLL 所有导出函数的入口处添加宏(除非明确不需要)。
- 避免在全局/静态对象构造函数中使用:此时模块状态可能未初始化。
- 结合
CWinApp
派生类:若 DLL 有自己的CWinApp
,仍需显式处理导出函数。
总结
- 功能:确保跨模块调用时,MFC 正确访问资源、类型和消息映射。
- 何时使用:涉及多模块(DLL、COM、多线程)且使用 MFC 功能时。
- 核心价值:避免资源错乱、崩溃和逻辑错误,提升代码健壮性。
上一篇:通过简单示例来展示C/C++中是如何计算指针中字符串的长度
技术世界如同浩瀚的海洋,每一处看似复杂的暗流,实则是通向更深理解的航道。
你探索的每一个 MFC 模块状态、每一行看似晦涩的代码,都是在驾驭底层逻辑的力量。
也许今天的AFX_MANAGE_STATE
曾让你困惑,但当你跨越这道门槛,你会发现自己已悄然解锁了构建健壮软件的核心密钥。
记住:
真正的开发者,从不畏惧细节的挑战,而是将每一处“坑”化为成长的垫脚石。
当你能从容切换模块状态、驯服多线程的纷争、甚至让 COM 组件优雅协作时,那份“庖丁解牛”的成就感,便是技术之路上最美的风景。
保持好奇,持续深耕——因为你的每一份坚持,终将让代码焕发优雅与力量。
愿你在 MFC 的深海中,找到属于自己的星辰大海! 🚀
(用这段文字为技术探索注入热血与信念,让学习不止于代码,更是一场自我超越的旅程!)
相关文章:
MFC中使用Create或CreateDialog创建对话框失败,GetLastError错误码为1813(找不到映像文件中指定的资源类型)
文章目录 创建对话框失败示例、原因分析及解决方案示例代码错误原因解决方案 AFX_MANAGE_STATE(AfxGetStaticModuleState())作用一、功能1. 模块状态切换2. 自动状态恢复 二、为什么要用该函数?三、必须使用该宏的典型场景1. MFC 扩展 DLL(Extension DLL…...
std::invoke详解
基础介绍 c17版本引入了std::invoke特性,这是一个通用的调用包装器,可以统一调用: 普通函数成员函数函数对象Lambda表达式指向成员的指针 它的主要作用是提供一个统一的方式来调用各种可调用对象。 std::invoke依赖的头文件:#…...
【Rust】枚举和模式匹配——Rust语言基础14
文章目录 1. 枚举类型1.2. Option 枚举 2. match 控制流结构2.1. match 对绑定值的匹配2.2. Option<T> 的匹配2.3. 通配模式以及 _ 占位符 3. if let 控制流4. 小测试 1. 枚举类型 枚举(enumerations),也被称作 enums。枚举允许你通过…...
视频理解之Actionclip(论文宏观解读)
配合解读代码解读 1.研究背景 1. 视频行为识别的重要性 视频行为识别是视频理解领域的核心任务之一,旨在通过分析视频内容来识别和分类其中的人物行为或活动。这一任务在多个领域具有重要的应用价值,例如智能监控、人机交互、自动驾驶、医疗健康等。随…...
【论文精读】Deformable DETR:用于端到端目标检测可变形 Transformer
论文:DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION 代码:Deformable-DETR 摘要 DETR 最近被提出用于消除目标检测中许多手工设计组件的需求,同时展示了良好的性能。然而,它存在收敛速度慢和特征空…...
Odoo18 Http鉴权+调用后端接口
最近在调研Odoo18,包括它的前后端原理、源码等。发现官方的开发文档并不十分实用,比如标题这种简单的实用需求,竟然浪费了一点时间,特此记录。 官方文档:External API — Odoo 18.0 documentation 前提:首…...
doris:SQL 方言兼容
提示 从 2.1 版本开始,Doris 可以支持多种 SQL 方言,如 Presto、Trino、Hive、PostgreSQL、Spark、Clickhouse 等等。通过这个功能,用户可以直接使用对应的 SQL 方言查询 Doris 中的数据,方便用户将原先的业务平滑的迁移到 Doris…...
Linux红帽:RHCSA认证知识讲解(六)创建、管理和删除本地用戶和组
Linux红帽:RHCSA认证知识讲解(六)创建、管理和删除本地用戶和组 前言一、用户和组概念用户类型对比表格主要组和补充组对比表格: 二、本地用户账户增删改查三、本地组账户 前言 上篇博客我们详细了解了从红帽和 DNF 软件仓库下载…...
【Repos系列】yum install nginx 是怎么从仓库中下载并安装的?
yum install nginx 是 YUM 包管理工具从配置的软件仓库中下载并安装软件包的核心操作。以下是其完整工作流程的详细步骤(结合缓存机制和依赖处理): 1. 隐式元数据同步(若缓存过期) 检查缓存有效性:…...
《JavaScript高级程序设计(第5版)》学习大纲
《JavaScript高级程序设计(第5版)》学习大纲 《JavaScript高级程序设计(第5版)》是JavaScript领域的经典“红宝书”,它从基础语法讲到高级特性,还包含浏览器环境和前端工程化等内容。本书2024年12月出版&a…...
基于微信小程序开发的宠物领养平台——代码解读
项目前端 一、项目的技术架构概况 一句话概括:该项目是基于微信小程序开发的宠物领养平台,采用原生小程序框架进行用户界面的构建,使用 wx.request 进行 API 请求,并通过 getApp() 和本地存储来管理全局状态和用户信息。 一&am…...
KICK第五课:Mac 系统下安装 Xcode 或 Clang
Mac 系统下安装 Xcode 或 Clang 详细指南 一、安装前的准备 确认系统版本 macOS 10.9 及以上版本支持 Xcode 和 Clang。若版本过低,需先升级系统。 了解工具区别 Xcode:苹果官方 IDE,包含完整开发环境、模拟器、调试工具等,适合…...
PHP语法基础
PHP语法基础 一,变量 在PHP中,变量是存储数据的容器,其灵活性和动态类型系统是PHP的核心特性之一。以下是PHP变量的详细解析,涵盖声明、作用域、类型转换及最佳实践: 1. 变量基础 声明与命名规则 无需显式声明类型&…...
嵌入式硬件: GPIO与二极管基础知识详解
1. 前言 在嵌入式系统和硬件开发中,GPIO(通用输入输出)是至关重要的控制方式,而二极管作为基础电子元件,广泛应用于信号整流、保护电路等。本文将从基础原理出发,深入解析GPIO的输入输出模式,包…...
母婴商城系统Springboot设计与实现
项目概述 《母婴商城系统Springboot》是一款基于Springboot框架开发的母婴类电商平台,旨在为母婴产品提供高效、便捷的在线购物体验。该系统功能全面,涵盖用户管理、商品分类、商品信息、商品资讯等核心模块,适合母婴电商企业或个人开发者快…...
Redis相关面试题
以下是150道Redis相关面试题: Redis基础概念 1. Redis是什么? Redis是一个开源的、基于内存的高性能键值存储数据库,常用于缓存、消息队列等场景。 2. Redis的特点有哪些? • 高性能,读写速度快。 • 支持多种数据…...
ArcGIS助力水文分析:数据处理、地图制作与流域特征提取
在水文水环境保护中,对于信息的采集、处理和分析是关键步骤。水文水环境及其相关数据均具有空间分布特征,传统的方法难以发挥作用。地理信息系统(GIS)强大的空间数据管理和分析功能,在空间信息处理上有独到的优势&…...
docker桌面版启动redis,解决无法连接
docker run -d --name redis -p 6379:6379 -v E:\2\redis\redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf 在本地创建一个目录,里面有个redis.conf文件,内容如下,启动时绑定这个配置文件目…...
Vue 项目中 CDN 引入的利弊及解决方案
在Vue项目中,引入到工程中的所有js、css文件,编译时都会被打包进vendor.js,浏览器在加载该文件之后才能开始显示首屏。若是引入的库众多,那么vendor.js文件体积将会相当的大,影响首屏的体验。通过调试发送时间主要消耗…...
【QT】】qcustomplot的使用
1.下载并添加qcustomplot.c和qcustomplot.h文件 拖动一个Widget,提升为qcustomplot 成功后是这样的, 改第三行:greaterThan(QT_MAJOR_VERSION, 4): QT widgets printsupport 编译,不报错,出现带坐标轴的界面&#…...
第三周日志-web(2)
原本计划的web不是这个,但是b站上一个大佬讲web做到了连我都能听懂,不趁热打铁学一学记一记就怕忘记了 指路:Shiro反序列化漏洞(一)-shiro550流程分析_哔哩哔哩_bilibili khttps://www.zhihu.com/question/486555909 学模板先看看结构和功…...
KICK第四讲Linux 系统下安装 GCC 编译器全指南
Linux 系统下安装 GCC 编译器全指南 GCC(GNU Compiler Collection)是 Linux 系统下最常用的编译器之一,支持 C/C、Java 等多种编程语言。本文将介绍不同 Linux 发行版下的安装方法,帮助开发者快速配置开发环境。 一、使用包管理…...
SpringCloud 学习笔记1(Spring概述、工程搭建、注册中心、负载均衡、 SpringCloud LoadBalancer)
文章目录 SpringCloudSpringCloud 概述集群和分布式集群和分布式的区别和联系 微服务什么是微服务?分布式架构和微服务架构的区别微服务的优缺点?拆分微服务原则 什么是 SpringCloud ?核心功能与组件 工程搭建父项目的 pom 文件 注册中心Rest…...
go 安装swagger
1、依赖安装: # 安装 swag 命令行工具 go install github.com/swaggo/swag/cmd/swaglatest# 安装 gin-swagger 和 swagger 文件的依赖 go get -u github.com/swaggo/gin-swagger go get -u github.com/swaggo/files 2、测试 cmd中输入: swag -v 如果…...
Java中关于Optional的 orElse 操作,以及 orElse 与 orElseGet 的区别
文章目录 1. 大概说明2. 详细分析2.1 .orElse 操作2.2 .orElse 的作用:避免空指针异常2.3 为什么要用?2.4 orElseGet如何使用2.5 orElse和orElseGet的区别 1. 大概说明 这篇文章的目的是为了说明: orElse 如何使用orElseGet 如何使用两者的…...
Sqlmap注入工具简单解释
安装 1. 安装 Python SQLMap 是基于 Python 开发的,所以要先安装 Python 环境。建议安装 Python 3.9 或更高版本,可从 Python 官方网站 下载对应操作系统的安装包,然后按照安装向导完成安装。 2. 获取 SQLMap 可以从 SQLMap 的官方 GitHu…...
petalinxu 在zynq的FPGA下的ST7735S的驱动配置
spi的接线: 【TFT模块排针8】 【开发板spi,gpio】【antminers9】 VCC ----------- 3.3V ----------- 3.3V GND ----------- GND ----------- GND BLK(背光)-------GPIO----------- BANK34_L4N_RXD2(w13; j2.12; gpio[2]) RST(复位ÿ…...
数据篇| App爬虫入门(一)
App 的爬取相比 Web 端爬取更加容易,反爬虫能力没有那么强,而且数据大多是以 JSON 形式传输的,解析更加简单。在 Web 端,我们可以通过浏览器的开发者工具监听到各个网络请求和响应过程,在 App 端如果想要查看这些内容就需要借助抓包软件。常见抓包软件有: 工具名称…...
【6】拓扑排序学习笔记
前言 有向无环图和拓扑排序直接关联到中后期的图论建模思想,是很重要的基础知识。这个如果不彻底弄懂,以后图论会很困难。 有向无环图 正如其名,一个边有向,没有环的图,也叫DAG。 DAG图实际运用:描述含…...
OpenCV实现图像特征提取与匹配
一、特征检测与描述子提取 选择特征检测器 常用算法包括: ORB:一种高效的替代SIFT和SURF的算法,主要用于移动机器人和增强现实等领域。适合实时应用,结合FAST关键点与BRIEF描述子。SIFT(尺度不变特征变…...
MyBatis 的核心配置文件是干什么的? 它的结构是怎样的? 哪些是必须配置的,哪些是可选的?
MyBatis 的核心配置文件(通常命名为 mybatis-config.xml)是 MyBatis 应用程序的入口点,它定义了 MyBatis 的全局配置信息 。 核心配置文件的作用: 配置 MyBatis 的运行时行为: 通过 <settings> 标签设置全局参数ÿ…...
VLAN,DHCP实验访问物理机
目标 三层交换机完成DHCP自动分配IP地址不同vlan间完成通信DNS服务器能够解析www.baidu.com,使PC机能够访问连接真实物理机,PC机与物理机能够互相访问 步骤 一、创建VLAN,配置好PC机和交换机的IP地址 LSW1 [LSW1]vlan batch 10 20 Info: T…...
六十天前端强化训练之第十七天React Hooks 入门:useState 深度解析
欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗,谢谢大佬! 目录 一、知识讲解 1. Hooks 是什么? 2. useState 的作用 3. 基本语法解析 4. 工作原理 5. 参数详解 a) 初始值设置方式 b) 更新函数特性 6. 注意事项 7. 类组…...
解决 HTTP 请求中的编码问题:从乱码到正确传输
文章目录 解决 HTTP 请求中的编码问题:从乱码到正确传输1. **问题背景**2. **乱码问题的原因**2.1 **客户端编码问题**2.2 **请求头缺失**2.3 **服务器编码问题** 3. **解决方案**3.1 **明确指定请求体编码**3.2 **确保请求头正确**3.3 **动态获取响应编码** 4. **调…...
跨国企业网络案例分析:SD-WAN智能组网
跨国企业面临的网络问题日益增加,如全球供应链协同、跨国研发协作及实时生产数据传输等场景,对网络质量提出更高要求。本文将深度解析某跨国工业集团如何通过SD-WAN实现网络架构智能化转型。 该集团以上海全球总部为核心,构建了覆盖亚欧美三大…...
视频孪生与三维视频融合:重构工业现场的“数字视网膜“
在浙江某精密制造企业的总控中心,30米长的曲面屏上实时跳动着工厂的每个生产细节:机械臂的运动轨迹与数字模型完全同步,质检工位的操作误差被自动标记,AGV小车的行进路径在三维空间中以光带形式可视化呈现。这种虚实交融的场景并非…...
STM32Cubemx-H7-7-OLED屏幕
如何把江科大的OLED标准库文件换成hal库的文件 前言 本文讲解如在hHAL库中使用OLED,其实江科大做的文件好已经很好了 只讲操作,不讲废话,默认大家都有32基本操作 创建工程 首先创建工程 把那两个引脚设置成开漏 获取标准库文件 打开江科大O…...
FPGA为何要尽量减少组合逻辑的使用
在FPGA设计中,组合逻辑的使用确实需要谨慎,尤其是要尽量减少它的复杂性。这并不是因为组合逻辑本身不好,而是因为它在实际应用中容易引发一系列问题,而这些问题往往与FPGA的设计哲学和硬件特性相冲突。让我从几个关键点来和你聊聊…...
缓存使用的具体场景有哪些?缓存的一致性问题如何解决?缓存使用常见问题有哪些?
缓存使用场景、一致性及常见问题解析 一、缓存的核心使用场景 1. 高频读、低频写场景 典型场景:商品详情页、新闻资讯、用户基本信息。特点:数据更新频率低,但访问量极高。策略: Cache-Aside(旁路缓存)&a…...
基于 RWA 模型与 AI - Agent 协同的企业级 aPAAS 架构设计
一、引言 在企业数字化转型不断深化的当下,现实世界资产(RWA)模型与人工智能智能体(AI - Agent)的协同融合,为企业级应用平台即服务(aPAAS)架构的创新发展带来了新契机。这种架构旨在…...
基于“动手学强化学习”的知识点(一):第 14 章 SAC 算法(gym版本 >= 0.26)
第 14 章 SAC 算法(gym版本 > 0.26) 摘要SAC 算法(连续)SAC 算法(离散) 摘要 本系列知识点讲解基于动手学强化学习中的内容进行详细的疑难点分析!具体内容请阅读动手学强化学习&…...
【QT:信号和槽】
QT信号涉及的三要素:信号源、信号类型、信号的处理方式。 QT的信号槽机制: 给按钮的点击操作关联一个处理函数,用户点击按钮时触发,对应的处理函数就会执行 QT中使用connect函数将信号和槽关联起来,信号触发…...
Oracle中的INHERIT PRIVILEGES权限
Oracle中的INHERIT PRIVILEGES权限 存储过程和用户函数的AUTHID属性调用者权限vs定义者权限一个简单的示例INHERIT PRIVILEGES权限的含义INHERIT PRIVILEGES权限的安全隐患注意到Oracle 19c数据库中有如下权限信息: SQL> select grantor,grantee,table_name,privilege fro…...
Compose笔记(九)--Checkbox
这一节主要了解一下Compose中的Checkbox,它是Jetpack Compose UI框架中的一个组件,用于创建复选框功能。它允许用户从一个集合中选择一个或多个项目,可以将一个选项打开或关闭。与传统的Android View系统中的Checkbox相比,Compose…...
CSS中粘性定位
1.如何设置为粘性定位? 给元素设置posttion:sticky 即可实现粘性定位. 可以使用left, right ,top, bottom 四个属性调整位置,不过最常用的是top 值. 2.粘性定位的参考点在哪里? 离他最近的一个拥有"滚动机制"的祖先元素,即便这个祖先不是最近的真实可滚动祖先. 3.粘…...
日本IT|AWS工作内容及未来性、以及转职的所需资质和技能
AWSとは AWSはAmazon Web Services(アマゾンウェブサービス)の略称です。 名称から分かるとおり、ネットを通じた通販などを事業として行っているAmazon.com社がクラウドサービスとして運営しています。 本来であれば自分たちでインフラ環境を構築する…...
《Spring日志整合与注入技术:从入门到精通》
1.Spring与日志框架的整合 1.Spring与日志框架进行整合,日志框架就可以在控制台中,输出Spring框架运行过程中的一些重要的信息。 好处:方便了解Spring框架的运行过程,利于程序的调试。 Spring如何整合日志框架 Spring5.x整合log4j…...
如何判断一个项目用的是哪个管理器
如何判断一个项目用的是哪个管理器 npm: 如果项目中存在 package-lock.json 文件,这通常意味着项目使用 npm 作为包管理器。package-lock.json 文件会锁定项目的依赖版本,确保在不同环境中安装相同的依赖。 pnpm: 如果项目中存在 pnpm-lock.yaml 文件&a…...
软件工程概述
软件开发生命周期 软件定义时期:包括可行性研究和详细需求分析,任务是确定软件开发的总目标。 问题定义可行性研究(经济、技术、操作、社会可行性,确定问题和解决办法)需求分析(确定功能需求,性…...
文件系统 linux ─── 第19课
前面博客讲解的是内存级文件管理,接下来介绍磁盘级文件管理 文件系统分为两部分 内存级文件系统 : OS加载进程 ,进程打开文件, OS为文件创建struct file 和文件描述符表 ,将进程与打开的文件相连, struct file 内还函数有指针表, 屏蔽了底层操作的差异,struct file中还有内核级…...