将 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 类型
如何最好地将 CString 转换为 BSTR 以将其作为“in”参数传递给 COM 方法?