将BSTR转换为const char *

时间:2010-11-29 09:27:13

标签: c++

  

可能重复:
  Which is better code for converting BSTR parameters to ANSI in C/C++?
  How to convert char * to BSTR?

你好,伙计们,  我是C ++的新手,任何人都知道如何将BSTR转换为const char *?

3 个答案:

答案 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。