после того, как вызывается декструторв для _bstr_t происходит попытка освободить память занятую по строку с помощью SysFreeString — вызов котого наламывается (invalid pointer use) Т.к. память была выделана иначе, нежели SysAllocString
Вопрос: как правильно ее выделить в 1-й библиотеке или осовободить в 2-й?
А не проще завести переменную типа String *, считать в нее, а потом освободить (возможно, через специальную функцию первой ДЛЛ)?
ЗЫ. Ни с managedC++, ни с _bstr_t не работал,и специфики их работы не знаю. Советую просто по опыту обычного С++.
Re[2]: Как правильно выделить память ?
От:
Аноним
Дата:
09.12.05 12:01
Оценка:
Здравствуйте, BitField, Вы писали:
BF>Здравствуйте, Аноним, Вы писали:
BF>А не проще завести переменную типа String *, считать в нее, а потом освободить (возможно, через специальную функцию первой ДЛЛ)?
BF>ЗЫ. Ни с managedC++, ни с _bstr_t не работал,и специфики их работы не знаю. Советую просто по опыту обычного С++.
Спасибо за совет . Но хотелось бы все таки узнать как правильно выделить память. Чтоб потом SysStringFree ее смог корректно осободить. Я тоже мало работал с managed C++. В обысном C++ можно воспользоватся
то получится такая-же ситиация (bad pointer use). Что неудивительно.
Re: Как правильно выделить память ?
От:
Аноним
Дата:
09.12.05 12:17
Оценка:
Здравствуйте, Аноним, Вы писали:
Там где метод GetInfo реализуется, надо использовать SysAllocString (или варианты типа SysAllocStringLen).
В клиенте, если используешь _bstr_t, то достаточно будет
get_adapter()->GetInfo(&str_res);
Правильно выделенная на стороне сервера строка будет в итоге удалена деструктором str_res.
Ну а про сам SysAllocString/SysAllocStringLen читай в MSDN.
Там все просто до безобразия.
Re[2]: Как правильно выделить память ?
От:
Аноним
Дата:
09.12.05 13:28
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>Там где метод GetInfo реализуется, надо использовать SysAllocString (или варианты типа SysAllocStringLen). А>В клиенте, если используешь _bstr_t, то достаточно будет
А>get_adapter()->GetInfo(&str_res);
А>Правильно выделенная на стороне сервера строка будет в итоге удалена деструктором str_res.
А>Ну а про сам SysAllocString/SysAllocStringLen читай в MSDN. А>Там все просто до безобразия.
Пробоовал. Но не получается преобразовать String * str в OLECHAR*,
SysAllocString((OLECHAR*)&str) — такой вариант не канает. Может есть какой-то более правильной спосом преобразования?