определить что интерфейс не действителен
От: fanruten  
Дата: 01.09.11 18:16
Оценка:
Есть com объект реализованный в отдельном процессе.

Получаю com интерфейс при помощи GetInterfaceFromGlobal (IGlobalInterfaceTable).
Если com объект завершит свою работу (exception, ....) GetInterfaceFromGlobal все равно вернет указатель на запрашиваемый интерфейс и не выдаст ошибки, причем вызов функции из полученного интерфейса также отработает без падений и прочего.

Как понять что com объект не функционирует?
Re: определить что интерфейс не действителен
От: Vi2 Удмуртия http://www.adem.ru
Дата: 01.09.11 19:11
Оценка:
Здравствуйте, fanruten, Вы писали:

F>Есть com объект реализованный в отдельном процессе.


F>Получаю com интерфейс при помощи GetInterfaceFromGlobal (IGlobalInterfaceTable).

F>Если com объект завершит свою работу (exception, ....) GetInterfaceFromGlobal все равно вернет указатель на запрашиваемый интерфейс и не выдаст ошибки, причем вызов функции из полученного интерфейса также отработает без падений и прочего.

Смотря какая функция, некоторые функции IUnknown интерфейса может отрабатывать прокси. Но, как правило, вызов методов несуществующего объекта должен отрабатывать с ошибкой. Просто потому, что СОМ не найдет адресат.

F>Как понять что com объект не функционирует?


В стандарте утверждается, что в этом случае вызов необходимого метода должен завершаться с ошибкой.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re: определить что интерфейс не действителен
От: 5er Россия  
Дата: 02.09.11 09:26
Оценка:
Здравствуйте, fanruten, Вы писали:

F>Есть com объект реализованный в отдельном процессе.


F>Получаю com интерфейс при помощи GetInterfaceFromGlobal (IGlobalInterfaceTable).

F>Если com объект завершит свою работу (exception, ....) GetInterfaceFromGlobal все равно вернет указатель на запрашиваемый интерфейс и не выдаст ошибки, причем вызов функции из полученного интерфейса также отработает без падений и прочего.

F>Как понять что com объект не функционирует?


Прокси должен вернуть ошибку.

А сам процесс-то живой?
Сложилось такое впечатление, что да, и в нем имеет место быть interface leak.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.