【发布时间】:2013-05-24 06:49:04
【问题描述】:
如何将 LPWSTR 转换为 BSTR ? LPWSTR 是 WCHAR * 而 BSTR 是 OLECHAR *,OLECHAR 又是 WCHAR 类型,简单的类型转换就可以吗?或者我们需要做一些额外的努力?它显示错误的转换错误/警告。
【问题讨论】:
如何将 LPWSTR 转换为 BSTR ? LPWSTR 是 WCHAR * 而 BSTR 是 OLECHAR *,OLECHAR 又是 WCHAR 类型,简单的类型转换就可以吗?或者我们需要做一些额外的努力?它显示错误的转换错误/警告。
【问题讨论】:
你这样做
BSTR pBstr = SysAllocString(szWCharString);
// do something with the BSTR here ...
SysFreeString(pBstr);
您必须记住在之后调用SysFreeString 来释放用于转换的空间。
【讨论】:
BSTR 由 OLECHAR[] 和附加到字符串的长度信息组成。 BSTR 是指向 OLECHAR[] 部分的指针。但是 BSTR 函数需要长度信息(容量和当前长度)。
您需要SysAllocString 函数来分配整个结构。
【讨论】:
LPWSTR 变量不是用SysAllocString 分配的,而是一个 4 字节的简单变量。但是,当您有一个 BSTR 指针,并将值转换为 LPWSTR 时,您可以将此指针传递给 SysFreeString,同时将其隐式转换为 BSTR。但你有责任以这种方式做到这一点。通常一个演员表表明你比编译器更好,你应该有信心采取这种尖刻的方式。