在VC6.0下设置Unicode编译环境

ObservableList 普通的List是“数据容器”,而是“数据源 + 广播电台”。添加的功能:监听器、精准变更报告、原子替换、实时过滤/排序视图。本质区别普通List是被动的(你问它才给)。是主动的(它变了就立刻告诉你,并且告诉你“哪里变了、怎么变的”)。正是因为它具备了这种“主动广播”的能力,JavaFX 才能实现数据驱动 UI的响应式编程模型。你之前在ComboBox源码中看到的监听器,正是依赖的机制才得以生效的。 阅读详情

在VC6.0下设置Unicode编译环境 - [C/C++]

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://joshuafan.blogbus.com/logs/13704654.html

VC++ 6.0支持Unicode编程,但默认的是ANSI,所以开发人员只需要稍微改变一下编写代码的习惯便可以轻松编写支持UNICODE的应用程序。

使用VC++ 6.0进行Unicode编程主要做以下几项工作:

1、为工程添加UNICODE和_UNICODE预处理选项。

  具体步骤:打开[工程]->[设置…]对话框,在C/C++标签对话框的“预处理程序定义”中去除_MBCS,加上_UNICODE,UNICODE。(注意中间用逗号隔开).

  在没有定义UNICODE和_UNICODE前,所有函数和类型都默认使用ANSI的版本;在定义了UNICODE和_UNICODE之后,所有的MFC类和Windows API都变成了宽字节版本了。

2、设置程序入口点

  因为MFC应用程序有针对Unicode专用的程序入口点,我们要设置entry point。否则就会出现连接错误。
  设置entry point的方法是:打开[工程]->[设置…]对话框,在Link页的Output类别的Entry Point里填上wWinMainCRTStartup。

3、使用ANSI/Unicode通用数据类型

  微软提供了一些ANSI和Unicode兼容的通用数据类型,我们最常用的数据类型有_T ,TCHAR,LPTSTR,LPCTSTR。
  顺便说一下,LPCTSTR和const TCHAR*是完全等同的。其中L表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在Win32 中以及其它的32位操作系统中,long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义。P(pointer)表示这是一个指针;C (const)表示是一个常量;T(_T宏)表示兼容ANSI和Unicode,STR(string)表示这个变量是一个字符串。综上可以看出, LPCTSTR表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。比如:

TCHAR* szText=_T(“Hello!”);TCHAR szText[]=_T(“I Love You”);LPCTSTR lpszText=_T(“大家好!”);

使用函数中的参数最好也要有变化,比如:

MessageBox(_T(“你好”));

  其实,在上面的语句中,即使您不加_T宏,MessageBox函数也会自动把“你好”字符串进行强制转换。但我还是推荐您使用_T宏,以表示您有Unicode编码意识。

4、修改字符串运算问题

  一些字符串操作函数需要获取字符串的字符数(sizeof(szBuffer)/sizeof(TCHAR)),而另一些函数可能需要获取字符串的字节数sizeof(szBuffer)。您应该注意该问题并仔细分析字符串操作函数,以确定能够得到正确的结果。
ANSI操作函数以str开头,如strcpy(),strcat(),strlen();
Unicode操作函数以wcs开头,如wcscpy,wcscpy(),wcslen();
ANSI/Unicode操作函数以_tcs开头 _tcscpy(C运行期库);
ANSI/Unicode操作函数以lstr开头 lstrcpy(Windows函数);
考虑ANSI和Unicode的兼容,我们需要使用以_tcs开头或lstr开头的通用字符串操作函数。

六、举个Unicode编程的例子

第一步:
  打开VC++6.0,新建基于对话框的工程Unicode,主对话框IDD_UNICODE_DIALOG中加入一个按钮控件,双击该控件并添加该控件的响应函数:

void CUnicodeDlg::OnButtonUnicode() { TCHAR* str1=_T("ANSI和 UNICODE编码试验"); m_disp=str1; UpdateData(FALSE);}

  添加静态文本框IDC_DISP,使用ClassWizard给该控件添加CString类型变量m_disp。使用默认ANSI编码环境编译该工程,生成Unicode.exe。

第二步:修改系统内码
  打开“控制面板”,单击“日期、时间、语言和区域设置”选项,在“日期、时间、语言和区域设置”窗口中继续单击“区域和语言选项”选项,弹出“区域和语言选项”对话框。在该对话框中,单击“高级”标签,将“非Unicode的程序的语言”选项改为“日语”,单击“应用”按钮,

弹出的对话框单击“是”,重新启动计算机使设置生效。
运行Unicode.exe程序并单击“Button1”按钮,看,静态文本框出现了乱码。

第三步:
  改为Unicode编码环境编译该工程,生成Unicode.exe。再次运行Unicode.exe程序并单击“Unicode”按钮。看到Unicode编码的优势了吧。






苍穹批量下载附件 this.getView().showTipNotification("批量附件下载失败,请联系管理员");logger.error("批量下载失败", ex);String zipName = "批量下载附件.zip";//将批量下载附件上传到临时文件系统。1、设置批量附件文件信息。 阅读详情

相关推荐

【GEE实战】Sen+MK趋势分析:从代码到地图,解锁植被变化时空密码

本文详细介绍了在Google Earth Engine(GEE)平台上使用Sen斜率估计和Mann-Kendall(MK)检验进行植被变化趋势分析的全流程。从遥感数据加载、Sen斜率计算到MK显著性检验,结合代码示例和实战经验,帮助读者掌握植被时空变化分析的实用技巧,为生态监测和环境保护提供数据支持。

weixin_42628688的博客 197

VC ANSI字符集和UNICODE字符集的相互转化

http://hi.baidu.com/%B3%CC%D0%F2%D4%B1%D3%A3%C4%BE%CB%AE%B5%C0/blog/item/a7f59e009817ec034bfb51a8.html VC ANSI字符集和UNICODE字符集的相互转化 2010-04-09 11:36 ANSI 字符集中的字符串使用一个字节的空间来存放一个字

未来软件 1489

普通人也能看懂的Transformer源代码解释(PyTorch)

Transformer源代码解释之PyTorch篇 章节 词嵌入 位置编码 多头注意力 搭建Transformer 在这里插入图片描述 词嵌入 Transformer本质上是一种Encoder,以翻译任务为例,原始数据集是以两种语言组成一行的,在应用时,应是Encoder输入源语言序列,Decoder里面输入需要被转换语言序列(训练时)。一个文本常有许多序列组成,常见操作为将序列进行一些预处理(如词切分等)变成列表,一个序列的列表的元素通常为词表中不可切分的最小词,整个文本就是一个大列表,元素为一个一

qq_50974223的博客 4131

vc++6.0 将CString 转换Unicode 的字符串,ANSI编码 和 unicode编码 互转

vc++6.0 将CString 转换Unicode 的字符串

paolei的笔记 9741

vc 编译器环境变量设置

在cmd中使用vc编译器需要设置三个环境变量: 1:系统环境变量path加入"编译器路路径/bin"; 2:加入include环境变量:"编译器路径/include"; 3:加入lib环境变量:"编译器路径/lib"; 比如我的vc编译器放在E:\developTool\VC2010 path应加入E:\developTool\VC2010\bin 再为系统加入两个环境变量incl...

zben000的专栏 852

VC6.0设置Unicode编译环境

VC6.0设置Unicode编译环境 收藏 VC++ 6.0支持Unicode编程,但默认的是ANSI,所以开发人员只需要稍微改变一下编写代码的习惯便可以轻松编写支持UNICODE的应用程序。  使用VC++ 6.0进行Unicode编程主要做以下几项工作: 1、为工程添加UNICODE和_UNICODE预处理选项。   具体步骤:打开[工程]->[设置…]对话框,在C/C++标签对话框的“预处理程序定义”中去除_MBCS,加上_UNICODE,UNICODE。(注意中间用逗号隔开).   在没有定义U

海风鸥 - 编程技术交流 950

知识库的构建 [ 3 ]

先按主题或段落初步划分,再对超长块递归细分,直至满足大小限制。递归分块融合了结构化与非结构化处理逻辑,与固定大小的分块不同,这种方法保持了语言的自然流畅性并保留了完整的内容语义。

Small_entreprene的博客 411

使用easyexcel导出数据

使用EasyExcel 2.1.4实现自定义监听器,校验表头(去除换行空格)及数据行:转换实体,检查组合代码/类型、计划类型非空且合法,收集错误信息,返回有效数据列表。

feng_huilu_zhuan的博客 215

C语言实现带头双向循环链表

本人的技术笔记会优先发布在个人站点。

2501_93598028的博客 274

06-05-排序集合-综合对比-SortedSet-vs-SortedDictionary-vs-SortedList选型

<think>我们根据要求,生成一篇不超过150字的文章摘要。内容是关于SortedSet、SortedDictionary与SortedList的选择指南。需要提取核心要点:根据语义选择类型,树型与数组型实现差异,注意比较器、可变键、性能与内存,以及实验验证。摘要应精炼。</think>摘要:比较SortedSet、SortedDictionary与SortedList,应优先按语义选择:唯一元素用Set,键值映射按更新模式选Dictionary或List,后者支持位置索引。注意比

设计 AI 玩游戏🎮 736

Kubernetes 认证和授权:从身份认证到权限控制实战

创建 clusterrole 名称 cluster-pod-deploy-reader,能够查看pod和deployment赋予给 shaka 用户shaka 用户在 auth 命名空间中:查看pod、deploymentshaka 用户在 kube-system 命名空间中:查看pod、deployment删除集群角色绑定和集群角色Service Account,即服务账户,pod 使用 Service Account 身份运行容器。

2603_94950994的博客 234

Guava——集合(一)

它解决了原生 Java 中 Map<K, List> 或 Map<K, Set> 维护繁琐的问题(如手动初始化集合、判空、移除元素等),将一个键对应多个值的逻辑封装为统一且简洁的接口。com.google.common.collect.BiMap 是 Guava 提供的双向映射(Bi-directional Map)接口。它继承自 Java 标准的 java.util.Map,核心特点是保证 键(Key)和值(Value)的双向唯一性。

吴声子夜歌的博客 367

onnxruntime-1.15.0-cp38-cp38-linux_armv7l.whl.zip

onnxruntime-1.15.0-cp38-cp38-linux_armv7l.whl.zip

上一篇: Visual C++常用数据类型转换
下一篇: C++ 获取系统时间
阳澄居士
博客等级 码龄20年 910粉丝 399原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值