0

我正在尝试将 _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 实际转换为预分配数组?这将避免在堆上分配字符...

4

1 回答 1

1

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

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

在 MSVC 2010 中:

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

于 2012-06-19T14:48:19.800 回答