【问题标题】:Convert a _bstr_t to a char array in place将 _bstr_t 原地转换为 char 数组
【发布时间】:2012-06-21 14:54:43
【问题描述】:

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

【问题讨论】:

标签: c++ string com


【解决方案1】:

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

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

在 MSVC 2010 中:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 2014-09-04
    • 2013-06-06
    • 2016-03-10
    • 2023-04-01
    • 2017-05-30
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多