这里的字符串为什么要加一个L呢?

时间:2022-07-27 02:47:50
::SysAllocString(L"Developers Samples_Zoomout C++");
SysAllocString,需要一个olechar类型的参数。
这里的字符串为什么要加一个L呢?

题外话,还有有时需要_T,看了就晕。
宽子节,有时候,要机加_T。
谢谢。

11 个解决方案

#1


在com处理中必须使用宽字符

#2


_T是为了ascii和uniode
的兼容
_L是为了定义宽字符时,被编译器识别!

#3


大家说的很详细了,可以结贴了。

#4


基本可以结贴了但是我还要过一会给分,不好意思。

我不是太清楚,com处理中必须使用宽字符,也就是所谓的BSTR了,是么??
这个L就可以转化为宽字符么。

还有谢谢FAICHEN(CC)。
但是我不明白,ascii和unicode,什么时候需要兼容呀。
ascii就是我们说的"a,b,c,*,8,7,1"
unicode 就是“人,口,手”等等宽字节么。
谢谢大家,接续回答。

#5


大家继续说点儿什么呀。

#6


你不应该这么看unicode和ascii两者的区别
应该说是ASCII只用一个字节表示,它定义的范围为0X00-0X7F,
而UNICODE是由两个字表示,范围可以达到65536,在前面128个字符(也就是0X0000-0X007F)兼容ASCII,后面的则分段表示各个国家的文字,符号。

所以在字符串前面加上一个L,编译器编译时会用两个字节来表示一个字符。

什么时候兼容?
如果你的的COM只是要自己用,那么你可以自定义,如果是要给别人用的,那就要兼容了。最好是都做成可以兼容的。

#7


加个L标识“Developers Samples_Zoomout C++”是以宽字符格式存储和处理!

而加_T则是让VC根据环境设置(ascii或unicode)自己决定后面字符串的处理格式!

#8


BSTR是另一种表示字符型字符串的方法, 一个BSTR是这样的指针, 它指向在前面带有字符数的零结束字符数组, 所以, BSTR可以指向二进制字符, 包括零, 
但是!!!!
要注意你能简单的删除字符串指针, 因为分的内存是从字符数开始的, 但BSTR是指向的第一个字符(或是零长的串尾)。
所以WINDOWS另有SysAllocStrint SysFreeString来分配和删除这个BSTR对象

#9


加L表示宽字节的
_T是代表你的工程环境设置是不是_UNICODE或者_MBCS而进行不同形式的变换,这仅仅跟工程环境设置有关,所以,不要认为_T是万能的

#10


UNICODE的字符串咯!windows核心编程里面讲过的。

#11


gz

#1


在com处理中必须使用宽字符

#2


_T是为了ascii和uniode
的兼容
_L是为了定义宽字符时,被编译器识别!

#3


大家说的很详细了,可以结贴了。

#4


基本可以结贴了但是我还要过一会给分,不好意思。

我不是太清楚,com处理中必须使用宽字符,也就是所谓的BSTR了,是么??
这个L就可以转化为宽字符么。

还有谢谢FAICHEN(CC)。
但是我不明白,ascii和unicode,什么时候需要兼容呀。
ascii就是我们说的"a,b,c,*,8,7,1"
unicode 就是“人,口,手”等等宽字节么。
谢谢大家,接续回答。

#5


大家继续说点儿什么呀。

#6


你不应该这么看unicode和ascii两者的区别
应该说是ASCII只用一个字节表示,它定义的范围为0X00-0X7F,
而UNICODE是由两个字表示,范围可以达到65536,在前面128个字符(也就是0X0000-0X007F)兼容ASCII,后面的则分段表示各个国家的文字,符号。

所以在字符串前面加上一个L,编译器编译时会用两个字节来表示一个字符。

什么时候兼容?
如果你的的COM只是要自己用,那么你可以自定义,如果是要给别人用的,那就要兼容了。最好是都做成可以兼容的。

#7


加个L标识“Developers Samples_Zoomout C++”是以宽字符格式存储和处理!

而加_T则是让VC根据环境设置(ascii或unicode)自己决定后面字符串的处理格式!

#8


BSTR是另一种表示字符型字符串的方法, 一个BSTR是这样的指针, 它指向在前面带有字符数的零结束字符数组, 所以, BSTR可以指向二进制字符, 包括零, 
但是!!!!
要注意你能简单的删除字符串指针, 因为分的内存是从字符数开始的, 但BSTR是指向的第一个字符(或是零长的串尾)。
所以WINDOWS另有SysAllocStrint SysFreeString来分配和删除这个BSTR对象

#9


加L表示宽字节的
_T是代表你的工程环境设置是不是_UNICODE或者_MBCS而进行不同形式的变换,这仅仅跟工程环境设置有关,所以,不要认为_T是万能的

#10


UNICODE的字符串咯!windows核心编程里面讲过的。

#11


gz