COM编程中有如:BSTR,_bstr_t,CComBSTR等,以及它们和CString之间的关系,以及它们自己之间的关系是怎么样的啊?各位请指点一下小弟

解决方案 »

  1.   

    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都是编译器封装类,都是为了更好地使用BSTR3. CString封装的字符串类型和_bstr_t,CComBSTR是不同的.
      

  2.   

    bstr是数据类型定义为OLECHAR *._bstr_t和CComBSTR都是BSTR的包装类,专门用于操作它,而CString是MFC定义的操作字符串的类,它也提供了BSTR的部分操作功能.
      

  3.   

    上面两位讲的比较详细,可以参考《ATL深入解析》一书,上面有一章专门讲这些数据类型。