代码之家  ›  专栏  ›  技术社区  ›  Serve Laurijssen

释放BSTR是否从记录集中返回

  •  0
  • Serve Laurijssen  · 技术社区  · 6 年前

    这里有一些ADODB代码可以从记录集中检索BSTR,但是我不确定BSTR是否应该用SysFreeString释放。现在它是,它似乎是工作,但你应该这样做自己吗?

        BSTR bstr = m_pRecordset->Fields->GetItem ( field )->Value.bstrVal;
    
        int len = SysStringLen(bstr);
    
        while (len > 0 && iswspace(bstr[len-1])) len--;
    
        BSTR newstr = SysAllocStringLen(bstr, len);
    
        SysFreeString(bstr);
        SysFreeString(newstr);
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   xMRi    6 年前

    你的代码错了。 m_pRecordset->Fields->GetItem ( field )->Value 返回一个 VARIANT 作为 _variant_t

    您应该将对象保存在一个临时变量中,访问数据,析构函数将完成其余的工作。

    _variant_t val = m_pRecordset->Fields->GetItem ( field )->Value;
    
    int len = SysStringLen(val.bstrVal);
    
    while (len > 0 && iswspace(bstr[len-1])) len--;
    
    BSTR newstr = SysAllocStringLen(val.bstrVal, len);
    ...
    SysFreeString(newstr);
    

    See sample here in the MSDN.

    还应该提到的是,使用 CComBSTR _bstr_t