关于如何从LPCOLESTR制作BSTR的任何想法?愚蠢的事情要挂掉......
答案 0 :(得分:5)
LPCOLESTR
只是const wchar_t*
,因此您可以使用SysAllocString()
创建BSTR
:
LPCOLESTR olestr = ...;
BSTR bstr = SysAllocString(olestr);
完成BSTR
后,请务必致电SysFreeString()
。另请参阅MSDN documentation on BSTR
s
答案 1 :(得分:2)
BSTR和LPCOLESTR之间的区别在于BSTR在字符串前面加上字符串的长度,LPCOLESTR没有。
BSTR不一定有一个结尾的\ 0标记字符串结尾,因为字符串的长度是前缀,要转换我通常使用类CComBSTR(atlcomcli.h),ctor采用BSTR或LPCOLESTR作为参数和成员BSTR()来获取BSTR表示:
CComBSTR b( yourolestring )
// b.BSTR()
CComBSTR将处理分配/释放,因此没有内存泄漏的风险。