将_bstr_t转换为char数组

时间:2012-06-19 14:28:25

标签: c++ string com

我正在尝试将_bstr_t对象转换为char数组。更具体地说,我有一个预先分配的char数组,我知道它的大小,我想在那里复制_bstr_t。

有一段时间我的代码看起来像这样:

  bool ReadCharPtr(_bstr_t const& input, char* output, unsigned int max_len)
  {
    //  THIS CODE IS WRONG !
    const char * temp (input );
    return ::strcpy_s(output, max_len, temp) == 0;
  }

但是......我不确定,在Windows文档中不清楚,当我致电operator char*() const时会发生什么。在堆中分配了什么,我必须在以后解除分配?

有没有办法避免这一步,实际上将_bstr_t字符转换为预分配数组?这样可以避免在堆上分配字符......

1 个答案:

答案 0 :(得分:1)

没有。这不是必需的。文档说“操作符将指针返回到实际的内部缓冲区,因此无法修改生成的字符串。”这意味着_bstr_t负责删除。

另外,您可以检查_bstr_t的实现:

在MSVC 2010中:

_bstr_t使用_com_util :: ConvertBSTRToString()从BSTR获取字符指针。 _com_util :: ConvertBSTRToString()文档说这需要被调用者删除。但是,_bstr_t会缓存此指针并在析构函数中删除。