Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
eugene_beast
Зарегистрирован: 24.07.2002 Сообщения: 9 Откуда: Иркутск
|
Добавлено: Пн Ноя 05 2001 13:08 Заголовок сообщения: программистам на С++ - помогите с СОМ (эксплорер) |
|
|
Народ, подскажите!
есть С++ прога, использует СОМ-интерфейсы эксплорера чтоб отображать веб-страницы, делаю в ней обход, получаю имена элементов типа:
for(long l = 0; l elem; TVariant name = l, index = l; if(ec()-item(name, index, elem.ptr()) == S_OK) { COMObject input_elem(IID_IHTMLInputElement, elem()); if(!input_elem) { BSTR type, name, value; input_elem()-get_type(&type); input_elem()-get_name(&name); input_elem()-get_value(&value); ...
как потом освобождать type, name, value ?!!! BSTR - это же указатели?! |
|
Вернуться к началу |
|
|
Overdrive
Зарегистрирован: 24.10.2001 Сообщения: 16 Откуда: Самара
|
Добавлено: Пн Ноя 12 2001 20:24 Заголовок сообщения: Re: программистам на С++ - помогите с СОМ (эксплорер) |
|
|
BSTR - не указатели, это что-то вроде Pascal'ной строки - в начале счётчик символов, потом содержимое. Требуют специальной обработки. Правила работы с BSTR:
OLECHAR str = L"MyString"; ::SysAllocString(str); // ... ::SysFreeString(str);
Однако, если вы передаете их в Explorer как выходные параметры, то ::SysAllocString() вызывать не нужно - это сделает он сам. А вот ::SysFreeString() вызывать обязательно для освобождения памяти. |
|
Вернуться к началу |
|
|
eugene_beast
Зарегистрирован: 24.07.2002 Сообщения: 9 Откуда: Иркутск
|
Добавлено: Вт Ноя 13 2001 02:54 Заголовок сообщения: Re: программистам на С++ - помогите с СОМ (эксплорер) |
|
|
Огромное спасибо, но я уже разобрался. Кстати, в С++ Builder есть вариант интереснее
WideString name; ... elem-get_name(&name); ...
Все. & - перегруженый оператор для WideString, возвращает указатель на BSTR (что нам и надо); в деструкторе все освобождается. |
|
Вернуться к началу |
|
|
mhunter Гость
|
Добавлено: Вс Ноя 18 2001 03:53 Заголовок сообщения: Re: программистам на С++ - помогите с СОМ (эксплорер) |
|
|
BSTR - указатели на UNICODE - строку в типе VARIANT(COleVariant) |
|
Вернуться к началу |
|
|
|