是否从记录集返回BSTR版本

时间:2018-09-07 06:11:33

标签: mfc com ado

这里有一些ADODB代码,它从记录集中检索BSTR,但是我不确定是否应使用SysFreeString发布BSTR。现在它似乎起作用了,但是您应该自己做吗?

    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 个答案:

答案 0 :(得分:2)

您的代码错误。 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代替BSTR。