这里有一些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);
答案 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);
还应该提到,最好使用CComBSTR
或_bstr_t
代替BSTR。