VC++中什么是BSTR、LPSTR以及LPWSTR呢
来源:互联网 发布:程序员该怎么建立博客 编辑:程序博客网 时间:2024/05/01 07:36
BSTR(Basic STRing,Basic字符串)是一个OLECHAR*类型的Unicode字符串。它被描述成一个与自动化相兼容的类型。由于操作系统
提供相应的API函数(如SysAllocString)来管理它以及一些默认的调度代码,因此BSTR实际上就是一个COM字符串,但它却在自动化
技术以外的多种场合下得到广泛使用。
LPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。
LPSTR被定义成是一个指向以NULL(‘/0’)结尾的8位ANSI字符数组指针,
LPWSTR是一个指向以NULL结尾的16位双字节字符数组指针。
在VC++中,还有类似的字符串类型,如LPTSTR、LPCTSTR等。
--------------------------------------------------------------
使用 ATL 提供的转换宏。
上表中的宏函数,其实非常容易记忆:
void fun()
{
USES_CONVERSION; // 只需要调用一次,就可以在函数中进行多次转换
LPCTSTR lp = OLE2CT( L"Hello,你好") );
... ... ... ...
// 不用显式释放 lp 的内存,因为
// 由于 ATL 转换宏使用栈作为临时空间,函数结束后会自动释放栈空间。
}
LPSTR 一个32位的指向字符串的指针
LPCSTR 一个32位的指向字符串常量的指针
LPWSTR 一个32位的指向unicode字符串的指针
LPCWSTR 个32位的指向unicode字符串常量的指针
前面的L代表LONG,P就是指针的意思,C就是constant的意思
W是wide的意思,STR就是string的意思
--------------------------------------------------------------
记下几个字符串东东,即他们得区别:
LPSTR:一个32位指向字符串的指针,相当于char *;
LPCSTR:一个32位指向字符串常量的指针,相当于const char *;
LPWSTR:一个32位指向Unicode字符串指针,相当于wchar_t *;
LPCWSTR:一个32位指向Unicode字符串常量指针,相当于const wchar_t *;
当然我们也可以相互转换一下(强行转换会变乱码):
LPWSTR--->LPTSTR: W2T();
LPTSTR--->LPWSTR: T2W();
LPCWSTR--->LPCSTR: W2CT();
LPCSTR--->LPCWSTR:T2CW();
上面我们可以看到L为LONG,P为POINT指针,W为WIDE,C为constant,STR为string。
--------------------------------------------------------------
LPSTR 一个32位的指向字符串的指针
LPCSTR 一个32位的指向字符串常量的指针
LPWSTR 一个32位的指向unicode字符串的指针
LPCWSTR 个32位的指向unicode字符串常量的指针
前面的L代表LONG,P就是指针的意思,C就是constant的意思
W是wide的意思,STR就是string的意思
具体的定义参看头文件
有C的表示是const字符串,不能被修改,没有的C的是不同字符串
有W的是unicode字符串,宽度力2个字节,没有W的是ascii字符串,宽度1个字节
--------------------------------------------------------------
如何理解LPCTSTR,
L表示long指针, 这是为了兼容Windows 3.1等16位操作系统遗留下来的, 在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
P表示这是一个指针
C表示是一个常量
T在Win32环境中, 有一个_T宏, 这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏, 那么这个字符或者字符串将被作为UNICODE字符串, 否则就是标准的ANSI字符串。
STR表示这个变量是一个字符串。
所以LPCTSTR就表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。
同样, LPCSTR就只能是一个ANSI字符串, 在程序中我们大部分时间要使用带T的类型定义。
LPCTSTR == const TCHAR *
--------------------------------------------------------------
1/char转换成LPWSTR的小问题error C2664: 'SQLGetInstalledDriversW' : cannot convert parameter 1 from 'char [2001]' to 'LPWSTR'
请教高手如何转换??
你把char直接改为wchar_t不就行了?
估计你的定义是
char buf[2001];然后在unicode 模式下编译程序,可以改为
TCHAR buf[2001];或者wchar_t buf[2001];
第一种方式可以适应mbcs和unicode2种编码方式。
- VC++中什么是BSTR、LPSTR以及LPWSTR呢
- VC++中什么是BSTR、LPSTR以及LPWSTR
- VC++中什么是BSTR、LPSTR以及LPWSTR
- VC++中什么是BSTR、LPSTR以及LPWSTR
- VC++中什么是BSTR、LPSTR以及LPWSTR
- BSTR、LPSTR和LPWSTR
- BSTR、LPSTR和LPWSTR
- BSTR、LPSTR和LPWSTR
- vc中各种类型字符串的转换 CComBSTR Char BSTR LPSTR LPCTSTR LPWSTR
- BSTR、LPSTR和LPWSTR 等多种VC字符类型分析
- BSTR、LPSTR和LPWSTR 等多种VC字符类型分析
- VC++ BSTR、LPSTR、LPWSTR 区别与联系(学习笔记)
- ASCII,Unicode, BSTR,LPSTR和LPWSTR转换...
- ASCII,Unicode, BSTR,LPSTR和LPWSTR转换...
- 一、BSTR、LPSTR和LPWSTR 转换
- ASCII,Unicode, BSTR,LPSTR和LPWSTR转换...
- VC++中关于TCHAR,WCHAR,LPSTR,LPWSTR,LPCTSTR的解释
- 字符串转换系列一:BSTR、LPSTR和LPWSTR
- nginx 缓存服务器
- POJ2388
- 编导是做什么的?编导具体做什么
- 浅谈SUN JVM内存管理与应用服务器的优化 之SUN JVM内存管理
- 利用InstallShield12制作安装包之三:判断操作系统类型的多种方法
- VC++中什么是BSTR、LPSTR以及LPWSTR呢
- POJ2418
- Eclipse3.2.2中安装Spring IDE2.0.1
- POJ2632
- db_cache_size、shared_pool_size一些初始化参数为什么是0?
- 2440PWMTimer启动流程
- 明朝时代
- Word效率工具(WET)
- 日本产业研究--读后感二 关于原材料和组装加工业 从钢铁到切割钢铁的。嘿嘿