Релиз BSTR возвращен из набора записей или нет - PullRequest
0 голосов
/ 07 сентября 2018

Здесь есть некоторый код 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 Ответ

0 голосов
/ 07 сентября 2018

Ваш код неверный. 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...