Re: Бага в CoUninitialize
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 18.09.06 11:58
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Доброго всем понедельника.


Наверное, надо пояснить, где подобная ошибка может произойти.

Ну во-первых, если вы, для своего ActiveX-объекта, самостоятельно реализуете объект ошибки с интерфейсом IErrorInfo.

Во-вторых, если вы юзаете такой объект и забиваете на получение объектов ошибок.

В третьих, если вы прямо или косвенно работаете с OLEDB-провайдерами. Провайдеры, как правило, используют объекты ошибок из oledb32.dll. Это был как раз мой случай

--------------
И, кстати говоря, тут сформулировалось очередное правило компоненто-писателям. При разрушении вашего COM-объекта не стоит обрабатывать внутренние ошибки и пытаться сообщить о них клиенту через пресловутый объект-ошибки. Я про реализацию деструкторов, если вы пишете на C++.

Во-первых, вы можете затереть действительно полезную ошибку другого COM-объекта (который юзал и инициировал разрушение вашего COM-объекта)
Во-вторых, вы потенциально нарываетесь на ранее описанную ошибку с CoUninitialize. Клиенту, как правило, по-барабану ошибки освобождения COM-объектов.

--------------
Вот. Обожаю COM и все его грабли
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.