把LPCOLESTR转换成BSTR?

时间:2009-08-01 23:33:19

标签: c++ bstr

关于如何从LPCOLESTR制作BSTR的任何想法?愚蠢的事情要挂掉......

2 个答案:

答案 0 :(得分:5)

LPCOLESTR只是const wchar_t*,因此您可以使用SysAllocString()创建BSTR

LPCOLESTR olestr = ...;
BSTR bstr = SysAllocString(olestr);

完成BSTR后,请务必致电SysFreeString()。另请参阅MSDN documentation on BSTRs

答案 1 :(得分:2)

BSTR和LPCOLESTR之间的区别在于BSTR在字符串前面加上字符串的长度,LPCOLESTR没有。

BSTR不一定有一个结尾的\ 0标记字符串结尾,因为字符串的长度是前缀,要转换我通常使用类CComBSTR(atlcomcli.h),ctor采用BSTR或LPCOLESTR作为参数和成员BSTR()来获取BSTR表示:

CComBSTR b( yourolestring )
// b.BSTR()

CComBSTR将处理分配/释放,因此没有内存泄漏的风险。