描述:
COM编程中有如:BSTR,_bstr_t,CComBSTR等,以及它们和CString之间的关系,以及它们自己之间的关系是怎么样的啊?各位请指点一下小弟
解决方案1:
上面两位讲的比较详细,可以参考《ATL深入解析》一书,上面有一章专门讲这些数据类型。
解决方案2: 1. BSTR: 一个Windows平台上各种语言环境(Visual Basic,Java,VC...)都能认识的数据类型,是为Automation而产生的.如果你的COM组件将被Script Host的语言(如:VBScript,JavaScript...)环境访问,则字符串类型必须用BSTR.
BSTR包含长度前缀(length-prefixed),是以null(0)为结束符的OLECHAR字符串.
所有的BSTR都必须由"COM管理的内存分配器"来管理.COM提供了几个API:
//分配和初始一个BSTR
BSTR SysAllocString(const OLECHAR* psz);
BSTR SysAllocStringLen(const OLECHAR* psz,UINT cch);
//重分配和初始化一个BSTR
INT SysAllocString(BSTR* pbstr,const OLECHAR* psz);
INT SysReAllocStrinLen(BSTR* pbstr,const OLECHAR* psz,UINT cch);
//释放一个BSTR
void SysFreeString(BSTR bstr);
//将"length-prefix"转换为字符或byte
UINT SysStringLen(BSTR bstr);
UINT SysStringByteLen(BSTR bstr);
2. _bstr_t和CComBSTR都是编译器封装类,都是为了更好地使用BSTR
3. CString封装的字符串类型和_bstr_t,CComBSTR是不同的.
bstr是数据类型定义为OLECHAR *._bstr_t和CComBSTR都是BSTR的包装类,专门用于操作它,而CString是MFC定义的操作字符串的类,它也提供了BSTR的部分操作功能.