COM中关于BSTR数据类型的有关问题

COM中关于BSTR数据类型的问题
我用ATL模版建了一个COM组件,想在其中用一个数据成员存储字符串数据,但是好像在COM中不能用CString类型的数据,是这样吗?但是要是用BSTR类型的数据,怎样用它来接收外面来的CString数据呢,好像和普通的字符串不同!请各位帮帮忙拉!:)

------解决方案--------------------
上面说的在接口中使用BSTR,在实现中使用CString.
说得再直白一点,就是函数参数使用BSTR,在函数里面使用CString ,这就涉及到了BSTR和CString的转换.

建立一个支持MFC的ATL项目,就可以了,这个方法简单.
------解决方案--------------------
首先,不能用CString 肯定是你的程序设置问题,你的程序可能是没有支持mfc。
不过不要紧的,你完全可以用CComBSTR代替这个CString,但是CString 还有很多的
ccombstr没有的方法和函数能带来很多的便利,这时候你需要对char相关的几个函数有点了解。
其次,你说的外面的CString,是否是Com的调用者发过来的?如果是,请转换成BSTR。Com
的方法只支持bstr类型的。
最后:字符串处理是很多开发语言中最重要的问题,不管什么破玩意类型不类型的,最后需要显示出来就要转换成字符串。COM乃至VC++的字符串与其说比较复杂,不如说很乱,非常乱,不像别的语言那么简单。所以建议你搞清楚以下几个东西:
1)非UNICODE -----每个字母8位一个字节,对应的类型 char
UNICODE--------每个字母16位二个字节,对应的类型 wchar
而这两个玩意与你的程序编译设置有关,运气不好的话相关的设置又会带来很多的警告甚至错误信息,修改设置也是个学问,不详细说了不知道是错误还是bug还是变态的细节了。
2)CString这个类型与上述设置是有关的,体现在求字符串的长度上。
3)BSTR是UNICODE类型的,相关的有CComBSTR, _bstr_t等,建议不要直接用BSTR,关系到内存,多用CComBSTR或者_bstr_t。
4)需要学会使用STL提供的string 和 wstring及其相关的模版函数。
5)知道非UNICODE 与UNICODE之间的转换方法,如W2A这个宏等。