核心编程边读边小结(2)

回顾一下第一、二章的内容。第一章主要是说GetLastError ()函数和如何得到错误信息内容。第二章谈字符处理。

一开始我想写一个命令行的程序,读入一个整数,输出本地(中文)的错误信息,和书中的第一章程序类似的。

才看完标准C++,想用std::cinstd::cout来输入和输出,但SDK本身是用另一套宏来表示字符的,转来转去比我想像的要麻烦,不过最的解决方案却很简单——对复杂问题有个简单的答案从来都是很美的事。

 

先来说下要用的API函数。GetLastError非常简单,返回一个DWORD码,然后用这个码去找信息文字,用到的是FormatMessage。这又引出了两个问题,一个是DWORD dwLanguageId参数是指定语言区域,书中用MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL)宏来得到。另一个是LPTSTR lpBuffer的参数是调用FormatMessage时分配的内存,使用方法按这样的步骤来:

1.         指定LPVOID lpBuffer

2.         在调用时转型(LPTSTR)&lpBuffer作为FormatMessage的参数。

3.         然后在使用后要LocalFree掉。

 

然后是另外一个问题,想用sdt::cout来输出LPTSTR或(TCHAR*),直接的想法是能不能将它们转成std::string。结果是可以转成std::wstring,但发现直接用std::wcout来输出中文字符是不行的。要输出中文字符,还必须在标准空间中设一下国际化支持,这样问题得到解决。对这个问题就有了两个层次的考虑,一是LPTSTRstd::wstring的转化,二是标准C++国际化支持。

 

最后小段代码如下

 

  

 

 

 

另外第二章的重要内容就是WideCharToMultiByteMultiByteToWideChar这一对函数的用法。值得注意的是如果传入目标字符串长为0,则返回目标字符串转换后的长度。下面的例子中,用wstrlen得到LPCTSTR的长,转换的字符串要分配内存,最后释放内存。

 

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值