你好,伙计们, 我是C ++的新手,任何人都知道如何将BSTR转换为const char *?可能重复:
Which is better code for converting BSTR parameters to ANSI in C/C++?
How to convert char * to BSTR?
答案 0 :(得分:7)
BSTR
实际上是一个带有长度前缀的WCHAR*
。 BSTR
值指向字符串的开头,而不是长度前缀(存储在BSTR
指向的位置之前的字节中。)
换句话说,您可以将BSTR
视为const WCHAR*
。无需转换。
所以你的问题确实是:“如何将Unicode字符串(WCHAR*
)转换为char*
?”,答案是使用::WideCharToMultiByte
API函数解释{ {3}}。或者,如果您在应用程序中使用MFC / ATL,请使用here。
答案 1 :(得分:4)
#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处理所有宽字符到多字节的转换。
答案 2 :(得分:0)
typedef OLECHAR FAR * BSTR;
typedef WCHAR OLECHAR;
来自here。
WCHAR *。这是一个广泛的char,而不是char。这意味着它是Unicode,而不是ASCII,不应转换。如果要使用const char *,请不要使用宽类型。
虽然可以使用一些hackery,但是你可能会丢失数据,因为你要将文本从Unicode转换为ASCII。