是否从记录集返回发布 BSTR



这里有一些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);

你的代码是错误的。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);

请参阅 MSDN 中此处的示例。

还应该提到的是,最好使用CComBSTR_bstr_t而不是 BSTR。

最新更新