Не могу работать с COM-обьектом из dll
От: VetalB  
Дата: 16.01.03 17:29
Оценка:
Hi, All!

Народ, помогите решить следующую проблему, может у кого уже такое
встречалось:

у меня есть COM-обьект (inproc_server). Мне нужно в dll работать с ним.
Создаю COM-обьект, и храню его интерфейс в Variant. После работы с ним при
попытке присвоить ему значение Unassigned или Null происходит зависание на
функции VarClear в библиотеке OleAut32.dll. Если не присваиваивать значение
Null/Unassigned, то зависание все равно произойдет после завершения работы
dll-ки при попытке очистить тот-же Variant.

Народ, помогите. Подскажите хто-нить, что делать, чтобы не происходило
зависание

Всем заранее ОООгромное спасибо.

Виталий
Re: Не могу работать с COM-обьектом из dll
От: Ведмедь Россия  
Дата: 16.01.03 17:33
Оценка:
Здравствуйте, VetalB, Вы писали:

VB>Hi, All!


VB>Народ, помогите решить следующую проблему, может у кого уже такое

VB>встречалось:

VB>у меня есть COM-обьект (inproc_server). Мне нужно в dll работать с ним.

VB>Создаю COM-обьект, и храню его интерфейс в Variant. После работы с ним при
VB>попытке присвоить ему значение Unassigned или Null происходит зависание на
VB>функции VarClear в библиотеке OleAut32.dll. Если не присваиваивать значение
VB>Null/Unassigned, то зависание все равно произойдет после завершения работы
VB>dll-ки при попытке очистить тот-же Variant.

VB>Народ, помогите. Подскажите хто-нить, что делать, чтобы не происходило

VB>зависание

А что за COM обьект, чей он? И попробуй очистить сам VARIANT для того что бы проверить а случайно зависает не в Release(); ТОгда возможно за зависание отвечает компонент, и тут надо работать с самим компонентом.

VB>Всем заранее ОООгромное спасибо.


VB>Виталий
Да пребудет с тобой Великий Джа
Re: Не могу работать с COM-обьектом из dll
От: Ivan Россия www.rsdn.ru
Дата: 16.01.03 17:47
Оценка: 12 (1)
Здравствуйте, VetalB, Вы писали:

VARIANT освобождаешь в DllMain ? Тога высказываю смелое предположение: при очистке Variant вызывается Release() у COM-объекта, если это последняя ссылка на объект, то возможно и dll-сервер с ним должна выгрузиться, а при выгрузке dll-сервера используется системная критическая секция, поэтому если ты освобождаешь VARIANT внутри DllMain — получится дедлок.
Re: Не могу работать с COM-обьектом из dll
От: Tom Россия http://www.RSDN.ru
Дата: 16.01.03 18:26
Оценка:
Так как подробностей ты не описал, то предположу следующее. Ты создал обьект в 1 потоке, а используешь его в другом. Но в 1 потоке не делаешь цикл выюорки сообщений.
Народная мудрось
всем все никому ничего(с).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.