【问题标题】:converting or casting LPWST into BSTR将 LPWST 转换或转换为 BSTR
【发布时间】:2013-05-24 06:49:04
【问题描述】:

如何将 LPWSTR 转换为 BSTR ? LPWSTR 是 WCHAR * 而 BSTR 是 OLECHAR *,OLECHAR 又是 WCHAR 类型,简单的类型转换就可以吗?或者我们需要做一些额外的努力?它显示错误的转换错误/警告。

【问题讨论】:

    标签: c++ windows wchar


    【解决方案1】:

    你这样做

    BSTR pBstr = SysAllocString(szWCharString);
    
    // do something with the BSTR here ...
    
    SysFreeString(pBstr);
    

    您必须记住在之后调用SysFreeString 来释放用于转换的空间。

    【讨论】:

    • 谢谢罗杰,实际上我有一个以 BSTR 作为参数的函数,当我将 LPWSTR 作为参数传递时,它显示错误的转换错误/警告。
    • @Anand 是的,它(编译器)告诉你必须传递正确的对象。你不能施放,因为它是另一回事。因此,您必须创建一个新对象(BSTR)并将其传递给函数。使用后不要忘记释放对象。
    【解决方案2】:

    BSTR 由 OLECHAR[] 和附加到字符串的长度信息组成。 BSTR 是指向 OLECHAR[] 部分的指针。但是 BSTR 函数需要长度信息(容量和当前长度)。

    您需要SysAllocString 函数来分配整个结构。

    【讨论】:

    • 不,你不能。 LPWSTR 变量不是用SysAllocString 分配的,而是一个 4 字节的简单变量。但是,当您有一个 BSTR 指针,并将值转换为 LPWSTR 时,您可以将此指针传递给 SysFreeString,同时将其隐式转换为 BSTR。但你有责任以这种方式做到这一点。通常一个演员表表明你比编译器更好,你应该有信心采取这种尖刻的方式。
    • 如果答案解决了您的问题,您可以点击“接受”复选标记。
    猜你喜欢
    • 2011-04-08
    • 2010-09-15
    • 2013-05-12
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多