将 LPCOLESTR 转换为 BSTR?

发布于 2024-07-29 19:40:21 字数 51 浏览 2 评论 0原文

关于如何用 LPCOLESTR 制作 BSTR 有什么想法吗? 愚蠢的事情被挂断了..

Any ideas on how to make a BSTR out of an LPCOLESTR? Silly thing to get hung up on..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

始于初秋 2024-08-05 19:40:21

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

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

请务必调用 SysAllocString() 创建 BSTR: microsoft.com/en-us/library/ms221481.aspx" rel="nofollow noreferrer">SysFreeString() 当您完成 BSTR 后。 另请参阅有关 BSTR 的 MSDN 文档

An LPCOLESTR is just a const wchar_t*, so you can use SysAllocString() to create a BSTR:

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

Be sure to call SysFreeString() when you're done with your BSTR. See also the MSDN documentation on BSTRs

记忆里有你的影子 2024-08-05 19:40:21

BSTR 和 LPCOLESTR 之间的区别在于,BSTR 在字符串之前添加了字符串的长度前缀,而 LPCOLESTR 则没有。

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

CComBSTR b( yourolestring )
// b.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 b( yourolestring )
// b.BSTR()

CComBSTR will handle the allocating/freeing so no risk of memory leak.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文