将 LPCOLESTR 转换为 BSTR?
关于如何用 LPCOLESTR 制作 BSTR 有什么想法吗? 愚蠢的事情被挂断了..
Any ideas on how to make a BSTR out of an LPCOLESTR? Silly thing to get hung up on..
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
LPCOLESTR
只是一个const wchar_t*
,因此您可以使用SysAllocString()
创建BSTR
:请务必调用
SysAllocString()
创建BSTR
: microsoft.com/en-us/library/ms221481.aspx" rel="nofollow noreferrer">SysFreeString()
当您完成BSTR
后。 另请参阅有关BSTR
的 MSDN 文档An
LPCOLESTR
is just aconst wchar_t*
, so you can useSysAllocString()
to create aBSTR
:Be sure to call
SysFreeString()
when you're done with yourBSTR
. See also the MSDN documentation onBSTR
sBSTR 和 LPCOLESTR 之间的区别在于,BSTR 在字符串之前添加了字符串的长度前缀,而 LPCOLESTR 则没有。
BSTR 不一定有结尾 \0 标记字符串的结尾,因为字符串的长度是有前缀的,为了进行转换,我通常使用类 CComBSTR (atlcomcli.h),该构造函数采用 BSTR 或 LPCOLESTR 作为参数,并且有是一个成员 BSTR() 来获取 BSTR 表示:
CComBSTR 将处理分配/释放,因此没有内存泄漏的风险。
The difference between BSTR and LPCOLESTR is that BSTR has the length of the string prefixed before the string, LPCOLESTR hasn't.
A BSTR doesn't necessarily have an ending \0 marking end of string, since the length of the string is prefixed, to convert I usually use the class CComBSTR (atlcomcli.h), the ctor takes either BSTR or LPCOLESTR as argument and there is a member BSTR() to get the BSTR representation:
CComBSTR will handle the allocating/freeing so no risk of memory leak.