现在的位置: 首页 > 综合 > 正文

CString不能转换成LPTSTR

2018年07月10日 ⁄ 综合 ⁄ 共 701字 ⁄ 字号 评论关闭

在大多数情况下,CString 转换成 LPTSTR是非常容易的,如果函数要求传入LPTSTR型的参数,直接传一个CString也行,但是在visual studio 2008中,却偶尔会出现不能转换的情况,这个为什么呢?

有人以为这是ASCII(多字节)与Unicode(宽字节)之间的问题,其实不是,要知LPTSTR这个宏是随编译器参数不同而不同的,如果在编译器——常规里面设置程序按ASCII编译,那LPTSTR就表示char*,如果选择按Unicode编译那就是wchar_t*。CString也是如此,随编译器选项的不同,可以是ASCII字符串也可以是Unicode字符串。那么CString与LPTSTR,要么全是多字节,要么全是宽字节,不可能存在两者之间不能转换的问题。

那么为什么有时候不能转换呢?我发现,如果是把CString作为参数传入SetWindowText函数,不会编译错误,如果传入GetWindowText,就会出错,而这两个函数都是以LPTSTR为参数的啊!

原来,在SetWindowText中,只对LPTSTR参数进行读取,而在GetWindwText中,会对LPTSTR参数进行写入,如果CString还没有初始化,就对CString进行写入,无疑是非常危险的,所以实际上,不允许没有初始化的CString转换为需要写入的LPTSTR实际上是出于安全的考虑。

所以解决方法就是先申请空间,如:

TCHAR s1[100];

再把s1作为参数传入GetWindowText。

 

 

转自:http://blog.sina.com.cn/s/blog_4ed027020100cue7.html

抱歉!评论已关闭.