博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR的区分与转化
阅读量:7030 次
发布时间:2019-06-28

本文共 1329 字,大约阅读时间需要 4 分钟。

hot3.png

首先在编译程序时经常会遇到这种问题:

错误 1 error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [3]”转换为“LPCTSTR”

1、觉得很烦,一般的做法就是不管三七二十一,在字符串前面加一个‘L’:
如调用函数FUN(LPCTSTR str)时,不能  FUN("HELLO"); 而是FUN(L"HELLO");
通常这样做都比较能解决问题。
2、或者还可以用_T(), 即 FUN(_T("HELLO"));   _T() 的别名还有 _TEXT(), TEXT()。
稍微研究了下,BSTR,LPSTR,LPWSTR,LPCTSTR,LPTSTR等这些让人头晕的东东。(还是C#里简单啊,直接tostring)

BSTR:是一个OLECHAR*类型的Unicode字符串,是一个COM字符串,带长度前缀,与VB有关,没怎么用到过。LPSTR:即 char *,指向以'/0'结尾的8位(单字节)ANSI字符数组指针LPWSTR:即wchar_t *,指向'/0'结尾的16位(双字节)Unicode字符数组指针LPCSTR:即const char *LPCWSTR:即const wchar_t *LPTSTR:LPSTR、LPWSTR两者二选一,取决于是否宏定义了UNICODE或ANSILPCTSTR: LPCSTR、LPCWSTR两者二选一,取决于是否宏定义了UNICODE或ANSI。

如下是从MFC库中拷来的:

#ifdef UNICODE    typedef LPWSTR LPTSTR;    typedef LPCWSTR LPCTSTR;#else    typedef LPSTR LPTSTR;    typedef LPCSTR LPCTSTR;#endif

3、相互转换方法:
前面需要定义:

USES_CONVERSION;

转换方法:

LPWSTR->LPTSTR:   W2T();LPTSTR->LPWSTR:   T2W();LPCWSTR->LPCSTR: W2CT();LPCSTR->LPCWSTR: T2CW();ANSI->UNICODE:     A2W();UNICODE->ANSI:     W2A();

另外,CString转为CStringW方法(通过一个wchar_t数组来转) 

CString str; CStringW strw; wchar_t *text = new wchar_t[sizeof(wchar_t) * str.GetLength()]; MultiByteToWideChar(CP_ACP,0,str,-1,text,str.GetLength()); strw = text;

4、另外,还可以强行转换,不过不一定能成功

5、还有_bstr_t ( 对BTSTR的封装,需要#include<comdef.h> ),也可将单字节字符数组指针转为双字节字符数组指针,还没怎么没用到过。

原文链接:

转载于:https://my.oschina.net/leixiaohua1020/blog/302129

你可能感兴趣的文章
用 Node 开发一个命令行版本词典--不到十行的代码
查看>>
支持多解码模块的安卓视频播放器AndroidVideoplayer
查看>>
TCP协议详解
查看>>
Node.js process 模块解读
查看>>
Lodash源码分析-compact.js
查看>>
度小满牵手南京银行打造”AI鑫”计划:银行零售业掀起变革运动
查看>>
微信小程序之分享海报生成
查看>>
敏捷AI|NLP技术在宜信业务中的实践「背景篇」
查看>>
布局结束检测工具
查看>>
[MetalKit]21-What's-new-in-graphics-and-games-at-WWDC-2016
查看>>
html2canvas在vue下的巨坑
查看>>
从设计师和开发的角度使用 lottie
查看>>
iOS之自定义tabBar
查看>>
Spring boot学习(三) Spring boot整合mybatis
查看>>
Redux 源码深度解析(附带视频1月14号上传)
查看>>
理解webpack原理,手写一个100行的webpack
查看>>
Node.js & Express 项目基本搭建
查看>>
掌握 MySQL 这 19 个骚操作,效率至少提高3倍
查看>>
【跃迁之路】【744天】程序员高效学习方法论探索系列(实验阶段501-2019.3.6)...
查看>>
用于大数据测试、学习的测试数据
查看>>