Re[5]: Вопрос по Drag'n'Drop STGMEDIUM->pUnkForRelease
От: Vi2 Удмуртия http://www.adem.ru
Дата: 14.07.04 03:52
Оценка:
Здравствуйте, Ignoramus, Вы писали:

I>Позволю себе с Вами не согласиться. Пусть себе память переместилась, но хендл на память, который выделила GlobalAlloc(GMEM_MOVEABLE, ...) должен был остаться прежним. Тем более, что выделение и освобождение памяти происходит в одном процессе — метод IDataObject::GetData вызывается в принимающем приложении и ReleaseStgMedium там же.


I>Кроме того, мне кажется, исключение вылетает именно в случае если присутствует строка "delete this" в TUnknownForRelease::Release(). Без нее с hGlobal никаких проблем не появляется.


I>Более того, если этот хендл мог бы меняться, как Вы говорите, я тогда не представляю себе как должен работать механизм pUnkForRelease Что он сможет сделать, если все изменилось и исходные хендлы потеряны на момент его активации?


Согласен. Но из кода, который был приведен, другое предположение и не последовало бы — там более-менее все в порядке. Единственное: nRefs обычно защищают при многопоточности и т.п. Раннее освобождение объекта было бы легко установить.

Через "delete this" в Release удаляется каждый (по крайней мере в ATL) СОМ объект, и никто не жалуется на вылет приложений из-за этого. Чаще "вылетают" при этом операторе, когда библиотека поддержки (по очистке ли ресурсов, при обращении к СОМу etc.) выгрузилась.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.