Здравствуйте!
При работе с памятью в COM я столкнулся с такой проблемой:
У меня имеются два COM-компонента, задача одного из них выделить буфер используя функцию CoTaskMemAlloc(), после этого он передает указатель второму. Второй работает с этим буфером и возвращает обратно первому. Вот в чем проблема — после того как первый компонент выделит и проинициализирует память при выходе из метода инициализации COM-runtime, почему-то, самостоятельно освобождает буфер, выделенный при помощи CoTaskMemAlloc() не дожидаясь пока я вызову CoTaskMemFree(). Мне бы хотелось, чтобы освобождение буфера происходило в предсказуемый момент времени, а именно при вызове CoTaskMemFree(), а не тогда, когда вздумается COM-runtime. Подскажите в чем загвоздка при работе с менеджером памяти COM.
Здравствуйте Токмашев А.В., Вы писали:
ТА>при выходе из метода инициализации COM-runtime, почему-то, самостоятельно освобождает
Ерунда какая-то! Ты что CoInit... вызываешь где попало? Или речь о чемто другом?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Работа с памятью в COM.
От:
Аноним
Дата:
21.01.02 08:18
Оценка:
Видимо все дело в том, что я из одного процесса в другой процесс
перемещаю двоичный буфер по значению (в IDL определении метода
используется size_is(XXX)). И после такого перемещения COM-runtime
делегирует права владения буфером принамающей стороне. То есть
теперь это она должна вызывать для буфера CoTaskMemFree(). А
чтобы не было утечки памяти на передающей стороне COM-runtime
самостоятельно вызывает CoTaskMemFree(). Вот видемо из-за этого
при выходе из метода инициализации (а в нем я как раз закладываю
буфер клиенту) COM-runtime, как будто невзначай освобождает
мой буфер. Хотя возможно я что-то не понимаю в работе COM.