由setlocale解决中文显示引发的探索
来源:互联网 发布:python nonzero 编辑:程序博客网 时间:2024/05/21 01:28
1.关于MD(d)、MT(d)编译选项的区别
编译选项
包含
静态链接的lib
说明
/MD
_MT、_DLL
MSVCRT.lib
多线程、Release、DLL版本的运行时库
/MDd
_DEBUG、_MT、_DLL
MSVCRTD.lib
多线程、Debug、DLL版本的运行时库
/MT
_MT
LIBCMT.lib
多线程、Release版本的运行时库
/MTd
_DEBUG、_MT
LIBCMTD.lib
多线程、Debug版本的运行时库
简单的说:
(1)/MD(d),表示运行时库由操作系统提供一个DLL,程序里不集成。程序在运行时,调用当前系统的运行时库。
(2)/MT(d),表示运行时库由程序集成。在编译链接的时候,直接把当前系统的运行时库集成到程序中。
需要注意的是,/MT(d)下,不同模块有自己的运行时库,需要避免在A里面分配堆,在B中去释放程序会崩溃。2.关于setlocale和_configthreadlocale请查看msdn
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE)使setlocale只针对当前线程起作用
_configthreadlocale(_DISABLE_PER_THREAD_LOCALE)使setlocale对所有线程的设置都有用(默认值)
3.在我们项目中,遇到在exe中调用setlocale(LC_ALL, "");然后在dll中调用wprintf(L"中文");后,wprintf并没有输出。
通过查找google和msdn,知道setlocale需要搭配另一个函数_configthreadlocale使用。但是即使我在exe中使用
_configthreadlocale(_DISABLE_PER_THREAD_LOCALE)来启用setlocale的更改对所有线程都起作用也不能解决问题。
最后发现这个问题并不是因为线程所导致。而是由于项目中,exe和dll的编译选项都采用的是/MT(d),导致exe和dll都有各自的运行时库,
setlocale只能在各自的运行时库里生效。
- 由setlocale解决中文显示引发的探索
- 解决由Handler引发的内存泄漏
- 由Sophix引发的安卓热更新底层原理探索
- 解决UNICODE字符集下CStdioFile的Writestring无法写入中文的问题//setlocale
- 由get请求引发的中文乱码整理
- 由fastlock引发的...
- 由Java属性文件*.properties中getParameter(String key)出现乱码引发的探索
- 由Typedef引发的问题
- 由InvocationTargetException引发的思考
- 由UseSubmitBehavior引发的问题
- 由BigDecimal引发的思考
- 由static引发的问题
- 由地理位置引发的应用
- 由IsPostBack引发的思考
- 由mmap引发的SIGBUS
- 由AppendMenu()引发的错误
- 由mmap引发的SIGBUS
- 由InvocationTargetException引发的思考
- haoop 错误记录
- Unity3D教程:实现基于Socket通讯的公共聊天室
- 随机 取题
- Non-negative Matrix Factorization and Probabilistic Latent Semantic Analysis
- oracle分配权限
- 由setlocale解决中文显示引发的探索
- VS2005 :Fatal Error C1902:程序数据库管理器不匹配,解决办法
- 如何使用Axure RP Widget Library?
- VB备忘录(21)ADO实例
- 杭电1008 Elevator
- 用jquery遇到的问题及解决方案
- c# json字符串转xml对象代码
- tomcat配置
- 基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数!