是否从记录集中返回BSTR

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否从记录集中返回BSTR相关的知识,希望对你有一定的参考价值。

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

你的代码错了。 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。

以上是关于是否从记录集中返回BSTR的主要内容,如果未能解决你的问题,请参考以下文章

如何从 COM DLL 返回包含多个空字符的 BSTR

是否可以*安全地*从函数中返回 TCHAR*?

仅当执行第一个查询的记录集中没有记录时,SPARQL 从第二个查询返回记录

BSTR 到 std::string (std::wstring) 反之亦然

从片段返回到上一个活动 onclick back button

PHP点滴记录