将 LPWST 转换或转换为 BSTR

Posted

技术标签:

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

如何将 LPWSTR 转换为 BSTR ? LPWSTR 是 WCHAR * 而 BSTR 是 OLECHAR *,OLECHAR 又是 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。但你有责任以这种方式做到这一点。通常一个演员表表明你比编译器更好,你应该有信心采取这种尖刻的方式。 如果答案解决了您的问题,您可以点击“接受”复选标记。

以上是关于将 LPWST 转换或转换为 BSTR的主要内容,如果未能解决你的问题,请参考以下文章

ATL 如何将 BSTR* str 转换为注册表项。 SetValue(LPCTSTR str 类型

C++ string如何转换为BSTR类型

如何最好地将 CString 转换为 BSTR 以将其作为“in”参数传递给 COM 方法?

如何将 B 字符串转换为字节?

错误 C2440:“默认参数”:无法从“const wchar_t [1]”转换为“BSTR”

_bstr_t 到 UTF-8 可能吗?