переключение на другой iface при отсутствии нужного свойства
От: Urij Россия  
Дата: 02.07.03 07:36
Оценка:
Всем доброго дня! Вопрос знатокам COM'a : подскажите каким образом реализовать следующий механизм работы Ax'а:ActiveX хостит еще один объект (точнее, Forms 2.0 Frame),этот внутренний объект создается не в момент инициализации самого ActiveX'а, а позднее, при выполнении определенных условий (это к тому, что в момент создания Ax'a еще не известно будет ли создаваться внутренний объект).Далее, есть скриптовый клиент,который дергает свойства/методы Ax'a и в какой-то момент хочет вызвать свойства/методы внутреннего объекта.Как сделать так, чтобы не найдя затребованного свойства в интерфейсе Ax'a, произошло переключение на интерфейс внутреннего объекта? Т.е. скриптовому клиенту было бы по-фигу с кем работать, с самим Ax'ом или с его содержимым.
Re: Эээ....
От: Cordell Россия  
Дата: 03.07.03 05:51
Оценка:
Здравствуйте, Urij

Несколько сумбурно описание... Я правильно понимаю, что у тебя ActiveX котрол логически делится на две части? Вернне сам контрол чего там агрегирует?

В таком случае нормальным ходом явлется то, что ActiveX выставляет два, так сказать собственных интерфеса, а не один. Причем по законам COM ты можешь переходить между ними без проблем. Через QueryInterface, ясный перец.

Теперь по части "не найдя затребованный свойств"... Это как? Типа, свойство в интерфейсе есть, но на него NOIMPLEMENTAL вертается? Так чтоли? Вообще-то по-нормальному у тебя должно быть часть свойств ActiveX, часть на втором интерфейсе, если уж они ему специфичны. Твой клиент поюзал ActiveX, позвал QueryInterface, переехал на второй интерфейс и его там как-то поюзал, как ему надо. Общая идея такова... Если не выполнилась твоя "определенная последовательность действий" при которой пораждается твой подобъект, и в этом случае надо зхаперить клиенту с ним работать, то сматюгайся в QueryInterface. Вернее верни при запросе QueryInterface на подинтерфес ошибку какю-нить поумней, чтоб клиент смог ее правильно обработать и на экран сматюгнуться, если это, конечно, надо (что вряд ли)

Всех благ. Артем.
Re[2]: Кажется, разобрался...:-)))
От: Urij Россия  
Дата: 03.07.03 09:41
Оценка:
Здравствуйте, Cordell, Вы писали:

C>Здравствуйте, Urij


C>Несколько сумбурно описание... Я правильно понимаю, что у тебя ActiveX котрол логически делится на две части? Вернне сам контрол чего там агрегирует?

Точно

C>В таком случае нормальным ходом явлется то, что ActiveX выставляет два, так сказать собственных интерфеса, а не один. Причем по законам COM ты можешь переходить между ними без проблем. Через QueryInterface, ясный перец.

Перец не совсем ясный, потому как клиент скриптовый, а он видит только один IDispatch (это не VB который может делать QI)

C>Теперь по части "не найдя затребованный свойств"... Это как? Типа, свойство в интерфейсе есть, но на него NOIMPLEMENTAL вертается? Так чтоли? Вообще-то по-нормальному у тебя должно быть часть свойств ActiveX, часть на втором интерфейсе, если уж они ему специфичны. Твой клиент поюзал ActiveX, позвал QueryInterface, переехал на второй интерфейс и его там как-то поюзал, как ему надо. Общая идея такова... Если не выполнилась твоя "определенная последовательность действий" при которой пораждается твой подобъект, и в этом случае надо зхаперить клиенту с ним работать, то сматюгайся в QueryInterface. Вернее верни при запросе QueryInterface на подинтерфес ошибку какю-нить поумней, чтоб клиент смог ее правильно обработать и на экран сматюгнуться, если это, конечно, надо (что вряд ли)

Часть свойств есть в "базовом" интерфейсе, часть в агрегате, но хочется чтобы для клиента они все виделись бы как присутствующие в базовом.Впрочем, я тут в форуме нашел пользительную ссылку.Буду изучать матчасть

C>Всех благ. Артем.

Спасибо за участие.Удачи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.