【发布时间】:2011-05-17 04:27:44
【问题描述】:
可能的重复:
Which is better code for converting BSTR parameters to ANSI in C/C++?
How to convert char * to BSTR?
如何将 BSTR 转换为 const char*?
【问题讨论】:
标签: c++
可能的重复:
Which is better code for converting BSTR parameters to ANSI in C/C++?
How to convert char * to BSTR?
如何将 BSTR 转换为 const char*?
【问题讨论】:
标签: c++
typedef OLECHAR FAR * BSTR;
typedef WCHAR OLECHAR;
来自here。
WCHAR*。这是一个宽字符,而不是字符。这意味着它是 Unicode,而不是 ASCII,不应该被转换。如果要使用 const char*,请不要使用宽类型。
虽然可以使用一些黑客技术,但您可能会丢失数据,因为您要将文本从 Unicode 转换为 ASCII。
【讨论】:
Graphics::DrawString:msdn.microsoft.com/en-us/library/ms535991(VS.85).aspx
BSTR 实际上是带有长度前缀的WCHAR*。 BSTR 值指向字符串的开头,而不是长度前缀(存储在 BSTR 指向的位置“之前”的字节中)。
换句话说,您可以将BSTR 视为const WCHAR*。无需转换。
所以您的问题实际上是:“如何将 Unicode 字符串 (WCHAR*) 转换为 char*?”答案是使用::WideCharToMultiByte API 函数,如here 所述。或者,如果您在应用程序中使用 MFC/ATL,请使用 ATL and MFC Conversion Macros。
【讨论】:
#include "comutil.h"
BSTR bstrVal;
_bstr_t interim(bstrVal, false);
// or use true to get original BSTR released through wrapper
const char* strValue((const char*) bstrVal);
This 处理所有宽字符到多字节的转换。
【讨论】: