Всем доброго дня! Вопрос знатокам COM'a : подскажите каким образом реализовать следующий механизм работы Ax'а:ActiveX хостит еще один объект (точнее, Forms 2.0 Frame),этот внутренний объект создается не в момент инициализации самого ActiveX'а, а позднее, при выполнении определенных условий (это к тому, что в момент создания Ax'a еще не известно будет ли создаваться внутренний объект).Далее, есть скриптовый клиент,который дергает свойства/методы Ax'a и в какой-то момент хочет вызвать свойства/методы внутреннего объекта.Как сделать так, чтобы не найдя затребованного свойства в интерфейсе Ax'a, произошло переключение на интерфейс внутреннего объекта? Т.е. скриптовому клиенту было бы по-фигу с кем работать, с самим Ax'ом или с его содержимым.
Несколько сумбурно описание... Я правильно понимаю, что у тебя ActiveX котрол логически делится на две части? Вернне сам контрол чего там агрегирует?
В таком случае нормальным ходом явлется то, что ActiveX выставляет два, так сказать собственных интерфеса, а не один. Причем по законам COM ты можешь переходить между ними без проблем. Через QueryInterface, ясный перец.
Теперь по части "не найдя затребованный свойств"... Это как? Типа, свойство в интерфейсе есть, но на него NOIMPLEMENTAL вертается? Так чтоли? Вообще-то по-нормальному у тебя должно быть часть свойств ActiveX, часть на втором интерфейсе, если уж они ему специфичны. Твой клиент поюзал ActiveX, позвал QueryInterface, переехал на второй интерфейс и его там как-то поюзал, как ему надо. Общая идея такова... Если не выполнилась твоя "определенная последовательность действий" при которой пораждается твой подобъект, и в этом случае надо зхаперить клиенту с ним работать, то сматюгайся в QueryInterface. Вернее верни при запросе QueryInterface на подинтерфес ошибку какю-нить поумней, чтоб клиент смог ее правильно обработать и на экран сматюгнуться, если это, конечно, надо (что вряд ли)
Здравствуйте, Cordell, Вы писали:
C>Здравствуйте, Urij
C>Несколько сумбурно описание... Я правильно понимаю, что у тебя ActiveX котрол логически делится на две части? Вернне сам контрол чего там агрегирует?
Точно
C>В таком случае нормальным ходом явлется то, что ActiveX выставляет два, так сказать собственных интерфеса, а не один. Причем по законам COM ты можешь переходить между ними без проблем. Через QueryInterface, ясный перец.
Перец не совсем ясный, потому как клиент скриптовый, а он видит только один IDispatch (это не VB который может делать QI)
C>Теперь по части "не найдя затребованный свойств"... Это как? Типа, свойство в интерфейсе есть, но на него NOIMPLEMENTAL вертается? Так чтоли? Вообще-то по-нормальному у тебя должно быть часть свойств ActiveX, часть на втором интерфейсе, если уж они ему специфичны. Твой клиент поюзал ActiveX, позвал QueryInterface, переехал на второй интерфейс и его там как-то поюзал, как ему надо. Общая идея такова... Если не выполнилась твоя "определенная последовательность действий" при которой пораждается твой подобъект, и в этом случае надо зхаперить клиенту с ним работать, то сматюгайся в QueryInterface. Вернее верни при запросе QueryInterface на подинтерфес ошибку какю-нить поумней, чтоб клиент смог ее правильно обработать и на экран сматюгнуться, если это, конечно, надо (что вряд ли)
Часть свойств есть в "базовом" интерфейсе, часть в агрегате, но хочется чтобы для клиента они все виделись бы как присутствующие в базовом.Впрочем, я тут в форуме нашел пользительную ссылку.Буду изучать матчасть
C>Всех благ. Артем.
Спасибо за участие.Удачи!