【问题标题】:Convert LPCOLESTR to BSTR?将 LPCOLESTR 转换为 BSTR?
【发布时间】:2009-08-01 23:33:19
【问题描述】:

关于如何用 LPCOLESTR 制作 BSTR 有什么想法吗?挂断电话的傻事..

【问题讨论】:

    标签: c++ bstr


    【解决方案1】:

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

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

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

    【讨论】:

    • 请注意,OLECHAR == wchar_t 仅在 Wintel 平台上为真。不确定其他平台是什么,但这是有趣的东西,在它们上 BSTR 可能也只是一个 char *,所以你的答案对于所有实际目的都是正确的;)
    【解决方案2】:

    BSTR 和 LPCOLESTR 的区别在于 BSTR 在字符串前面有字符串的长度,而 LPCOLESTR 没有。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 2010-09-15
      • 2013-05-12
      • 2013-05-24
      • 2023-03-14
      • 1970-01-01
      • 2010-10-11
      相关资源
      最近更新 更多