在共享dll中使用mfc_实战经验:在DLL中支持多语言

2023-11-17

在主程序中支持多语言

在主程序中建立不同的语言资源字符串,并调用API函数SetProcessPreferredUILanguages设置当前语言就可以实现多语言特性。

在DLL中支持多语言

1) 因为DLL是主程序加载阶段载入到进程地址空间的,所以DLL中使用的语言也会受到SetProcessPreferredUILanguages函数的影响。根据这一原理,我们可以在DLL的资源中也添加各种不同的语言,然后使用如下的代码来加载具体的字符串。

2) 如果DLL导出了一个C函数,则特别需要注意的资源句柄的切换问题。比如,DLL中导出了如下的函数:

以上代码将不会如期工作

CString的LoadString将在当前资源句柄(也即主程序模块)中寻找名为IDS_STRING_ID的字符串资源,但是很明显,我们的IDS_STRING_ID是定义在DLL模块中的,所以,LoadString将调用失败。解决方法是:我们需要函数调用时的资源句柄切换到DLL模块。MFC中已经有方法可以做到这一点:

AFX_MANAGE_STATE(AfxGetStaticModuleState());

通过在每一个DLL导出函数的第一行添加如上的语句,就可以实现资源句柄从主程序切换至DLL模块,从而顺利访问DLL中的资源。

修改后的代码如下:

结论

1) AFX_MANAGE_STATE这中方法综合采用了进程状态,线程状态以及模块状态等技术,也借助了MFC中的一些关键基础设施,最终促成了这一看似简单,实际底层工作繁杂的技法。问题虽然可以解决,但其多线程安全性和运行时性能我还没有充分测试。

2) 如DLL中导出的是一个类,则也可以使用此种方法来实现多语言,但这个宏放置的位置时每个方法里还是在类的构造/析构里,还是一个需要评估的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在共享dll中使用mfc_实战经验:在DLL中支持多语言 的相关文章

  • centos7的安装和创建用户

    1 centos7 2的安装 打开安装包之后解压 然后双击 进入下面的界面 选择语言 点击下一步 2 然后来到了配置页面 可以配置时间 选择中国的时区 3 其他的选择默认就好 重要的是选择安装类型和磁盘分区 4 选择安装类型 一般默认是mi
  • npm开发微信小程序--使用vantui 详解干货

    更新微信开发者工具创建项目 1 创建项目 放在一个合适的文件夹中 没有APPID时 请点击测试号 或去注册一个 2 进入项目的根目录 npm init 一路回车 要先npm init 初始化项目 否则会报错 官方文档中没有提到的东东 里面有
  • 爬虫实战——58同城租房数据爬取

    背景 自己本人在暑期时自学了python 还在中国大学mooc上学习了一些爬虫相关的知识 对requests库 re库以及BeautifulSoup库有了一定的了解 但是没有过爬虫方面的实战 刚好家人有这方面需求 就对58同城上的租房数据进
  • 简单工厂模式

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 创建头文件 二 创建 c文件 1 cat c 2 dog c 3 person c 三 创建main c 四 运行结果 总结 前言 工厂模式 常用的设计模
  • 《Keras深度学习:入门、实战与进阶》CIFAR-10图像识别

    本文摘自 Keras深度学习 入门 实战与进阶 https item jd com 10038325202263 html 这个数据集由Alex Krizhevsky Vinod Nair和Geoffrey Hinton收集整理 共包含了6
  • cas TicketValidationException 未能够识别出目标 ‘ST-1-UxVA37oEE-qN-S0NNZclYXsXxFQSD-20200510PZSQ‘票根

    原因 超时了 解决 去掉debug再测试一下
  • Hive Transaction(Hive 事务管理)

    Hive 事务在 Hive 3 得到增强 hive site xml 配置
  • Effective STL笔记(3)-Iterators

    这部分主要讲了常用迭代器用法的一些方面 分析STL中iterator const iterator reverse iterator和const reverse iterator的关系和一些转换 其内容比较少 简单 Item26 Prefe
  • Android 13 - binder阅读(6)- 使用ServiceManager获取服务

    最近事情好多 使用ServiceManager获取服务就暂时先不学习了 不过从之前的学习中我们也大致可以猜到使用ServiceManager获取服务的过程 根据服务名称获取到ServiceManager中服务代理对应的Handle 再到Bi
  • 服务器443端口响应代码,使用443端口远程服务器

    使用443端口远程服务器 内容精选 换一换 代码迁移工具进行代码迁移时 需要调用Linux下的rpm deb等命令才能完成扫描和迁移相关任务 这些命令和逻辑必须在后端Linux运行 IDE插件只支持以Web模式使用root用户安装工具 不支
  • 2022吴恩达机器学习(Deep learning)课程对应笔记20:特征工程&多项式回归

    2022吴恩达机器学习 Deep learning 课程对应笔记20 特征工程 多项式回归 更新时间 2023 03 20 特征工程 特征工程指的是选择特征 选择特征对模型的影响巨大 多项式回归 多项式回归就是 x n x n xn 对于多
  • 前端例程20221011:文本动态组合

    演示 原理 代码
  • MySQL之CRUD及常见面试题讲解

    目录 一 CRUD是什么 二 什么是SQL注入 三 行转列的使用 四 CRUD中常用关键词 关键词 GROUP BY HAVING ORDER BY 五 聚合函数和连表查询 聚合函数 连表查询 六 DELETE TRUNCATE DROP的
  • 交叉编译libxcb与X11

    交叉编译libxcb与X11 编译前提 工具安装 编译X11 编译依赖项Xtrans 编译依赖项xorgproto XCB完成后编译X11 X11完成 编译xcb 编译依赖项xcb proto 编译依赖项libXau 最后编译xcb XCB
  • (附源码)springboot学生宿舍管理系统 毕业设计453155

    Springboot学生宿舍管理系统 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化 电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用 信息时代的到来已成为不可阻挡的时尚潮流 人类发展的历史正进入一个新时代 在
  • RabbitMQ之Work Queues模式

    RabbitMQ之Work Queues模式 本下面的文字代码原来自官网 附上链接 RabbitMq 之 Work Queues 看完这篇文章对你绝对有好处 好处一 你可以了解透 Work Queues模式 本文章内容98 以上都是来自官网
  • win服务器启动springboot项目,Spring boot项目部署为windows服务

    用途 使用 Spring Boot 开发的 Web 项目 打包生成了一个 jar 包 部署在 Windows 服务器中 设置为开机启动spring boot 生成的 jar 包 直接用 java jar 运行 但是前提是需要登陆用户 并且注
  • linux经典书籍推荐

    对于linux来说 它的用处很多 它可以是java的基础 又可以构建系统 很多人对它越来越感兴趣 下面分享一些linux经典书籍供大家参考 入门篇 LINUX权威指南 书不错 写的很全面也比较广 涉及的不深 做为入门书籍不错 可以比较全面的

随机推荐

  • ConstraintLayout 属性详解 和Chain的使用

    http blog csdn net zxt0601 article details 72736802
  • Nacos手动注册,Nacos内网IP的解决办法,自动获取外网注册服务

    Nacos内网IP的解决办法 自动获取外网注册服务 废话不说 直接上代码 pom文件
  • Appstore审核被拒-[4. DESIGN: PREAMBLE]

    Appstore审核被拒原文如下 原因是设置里有一个版本信息可以响应点击事件进入一个版本详情页 苹果要求版本更新必须使用iOS版本更新内置更新机制 4 DESIGN PREAMBLE Design Preamble The version
  • 【华为OD机试真题 python】二进制差异数【2022 Q4

    前言 华为OD笔试真题 python 本专栏包含华为OD机试真题 会实时更新收纳网友反馈 为大家更新最新的华为德科OD机试试题 为大家提供学习和练手的题库 订阅本专栏后可私信进交流群哦 题目仅供参考 千万不要照抄 题目描述 二进制差异数 对
  • CK草稿本

    调用流程 获得op ptr ck有个工厂模式 const auto op ptrs ck tensor operation device instance DeviceOperationInstanceFactory
  • leetcode无重复字符的最长字串 python实现

    无重复字符的最长字串是一道字符串处理算法的题目 在日常编程中 处理字符串是常见任务 用Python来实现leetcode这道算法题 该题目会涉及到一个概念 滑动窗口 一 题目描述 给定一个字符串 请你找出其中不含有重复字符的 最长子串 的长
  • mac系统vim无法退出insert模式(ESC无效)

    表现 Vim 进入 Insert 模式以后 按 ESC 无法退出 解决方案 按 ctrl c
  • 电感与磁珠

    电感最重要的公式 它说明了电感的很多特性 比如 电感电流不能突变 电感的储能大小 电感的电流与电压的相位关系 还有电感的阻抗为什么是jwL 电感电流不能突变 电感电流为什么不能突变呢 来看这个公式 U等于负的L乘以di比dt Di比dt是指
  • linux上开发应用程序_如何在Linux上安装软件应用程序

    linux上开发应用程序 如何在Linux上安装应用程序 与许多操作系统一样 该问题不仅有一个答案 应用程序可以来自许多来源 几乎无法计数 每个开发团队都可以以自己认为最佳的方式交付软件 知道如何安装给出的内容是成为操作系统的真正超级用户的
  • asn1编码格式的解析过程

    本文以x509的解析为例说明asn1的编码格式的解析逻辑 x509证书的解析实际上是asn1格式的解析 这里着重说的是asn1的ber编码的解析 总的来讲 asn1格式的解析过程有三个重要的元素 一个是asn1数据本身 一个是openssl
  • vue中引用cdn中的js文件或者json的用法

    1 现在有一个js文件要放在cdn上 这个js文件的内容如下 var testArr a 1 2 我要在vue项目中使用这个变量 因为这个变量可能是经常变化的 但是不能变化一次就打包一次 所以将他放在cdn上 有使用的话直接改变cdn上的j
  • vscode运行C语言踩坑记

    前言 本文对Vscode运行C语言代码报错进行整理 重点是头文件路径正确仍然报错找不到路径的解决办法 需要注意 VScode本身不具有编译运行代码能力 所以需要先安装对应的编译环境并下载插件 已安装编译器软件的可以参考如下连接进行配置 Vi
  • Kali之Web渗透-扫描工具-Burpsuite

    在学习Burpsuit之前 我先说一下什么是代理 就是代理网络用户去取得网络信息 作为一个在浏览器和目标应用程序之间的中间人 允许你拦截 查看 修改在两个方向上的原始数据流 形象地说 它是网络信息的中转站 一般情况下 我们使用浏览器直接去连
  • 无需破解,Python这个神器帮你免费获取资源,赶紧收藏!

    球鞋那么难抢 有没有抢限量版球鞋的神器 每当限量版球鞋开售的时候 几十万人一拥而入 能抽中的却是少数 朋友圈刷到别人中标的消息 心里又羡慕又有点酸 今年DUNK推出的时候 我表弟竟然中了两双 他跟女朋友一人一双 这运气太好了吧 他跟我炫耀的
  • 拯救者R7000P(R7 4800H + RTX 2060)安装ubuntu18.04时黑屏,无法进入安装界面

    问题描述 插入启动盘选择u盘启动后能进入GNU GRUB 选择Try ubunut或Install ubuntu后黑屏或报错 无法正常安装 常见于搭载nvidia系列显卡且无核显或集显的电脑 也发生在有核显但为AMD处理器的电脑上 原因分析
  • stata-描述性统计分析和回归指令

    文章目录 1 简单描述性统计分析 2 bootstrap统计量 有置信区间 前文中提到如何将xls格式的数据读入stata并且将其转换为dta格式的数据 向stata中加载数据并且转换为dta格式之后读取 1 简单描述性统计分析 在读入数据
  • python中if __name__ == '__main__': 的解析

    python中if name main 的解析 当你打开一个 py文件时 经常会在代码的最下面看到if name main 现在就来介 绍一下它的作用 模块是对象 并且所有的模块都有一个内置属性 name 一个模块的 name 的值取决于您
  • Spring-boot 结合Thymeleaf--拦截器--文件上传

    目录 Spring boot 结合Thymeleaf 官方文档 基本介绍 Thymeleaf 是什么 Thymeleaf 的优点 Thymeleaf 的缺点 Thymeleaf 机制说明 Thymeleaf 语法 表达式 1 表达式一览 2
  • 柏睿java实习一面面经分享

    说一下list下面的类都有哪些 ArrayList和LinkedList的特点 jvm堆内存模型 jvm的垃圾回收算法都有哪些 简单描述一下它们事务的特性你对sql的优化了解多少 它有哪些方法 数据库的锁都有哪些 分别叙述下它们说一下lin
  • 在共享dll中使用mfc_实战经验:在DLL中支持多语言

    在主程序中支持多语言 在主程序中建立不同的语言资源字符串 并调用API函数SetProcessPreferredUILanguages设置当前语言就可以实现多语言特性 在DLL中支持多语言 1 因为DLL是主程序加载阶段载入到进程地址空间的