Народ, помогите решить следующую проблему, может у кого уже такое
встречалось:
у меня есть COM-обьект (inproc_server). Мне нужно в dll работать с ним.
Создаю COM-обьект, и храню его интерфейс в Variant. После работы с ним при
попытке присвоить ему значение Unassigned или Null происходит зависание на
функции VarClear в библиотеке OleAut32.dll. Если не присваиваивать значение
Null/Unassigned, то зависание все равно произойдет после завершения работы
dll-ки при попытке очистить тот-же Variant.
Народ, помогите. Подскажите хто-нить, что делать, чтобы не происходило
зависание
Здравствуйте, 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>Виталий
VARIANT освобождаешь в DllMain ? Тога высказываю смелое предположение: при очистке Variant вызывается Release() у COM-объекта, если это последняя ссылка на объект, то возможно и dll-сервер с ним должна выгрузиться, а при выгрузке dll-сервера используется системная критическая секция, поэтому если ты освобождаешь VARIANT внутри DllMain — получится дедлок.
Так как подробностей ты не описал, то предположу следующее. Ты создал обьект в 1 потоке, а используешь его в другом. Но в 1 потоке не делаешь цикл выюорки сообщений.