Помогите начинающему!
Ознакомился я со статьей "ВВедение в СОМ"
У меня есть COM-объект. В приложении клиенте я хочу
обращаться к методам этого объекта не зная его интерфейса.
Как это осуществить на VC++?
(В статье "введение в COM" показано как сделать это на VB.)
И еще такой вопрос. Допустим мой объект выполняет асинхронную операцию.
Я хочу создать событие по окончанию его выполнения. То есть, чтобы объект-сервер
по завершению операции вызывал функцию-обработчик у своего клиента.
MB>Ознакомился я со статьей "ВВедение в СОМ" MB>У меня есть COM-объект. В приложении клиенте я хочу MB>обращаться к методам этого объекта не зная его интерфейса. MB>Как это осуществить на VC++?
MB>(В статье "введение в COM" показано как сделать это на VB.)
VB штука хорошая, особенно для демонстрации и тестирования.
MB>И еще такой вопрос. Допустим мой объект выполняет асинхронную операцию. MB>Я хочу создать событие по окончанию его выполнения. То есть, чтобы объект-сервер MB>по завершению операции вызывал функцию-обработчик у своего клиента.
Нужно сгенерировать событие.
Если нам не помогут, то мы тоже никого не пощадим.
IT>Никак, это не возможно, интерфейс всё равно кто-то должен знать.
Не сразу разглядел тему топика :(
Если нужен сабж в полном объёме, то мне тебя откровенно жаль :) тут работки не на один месяц.
Посмотри реализацию CComDispatchDriver в ATL.
И если не секрет, то зачем тебе это? Всегда можно найти более простые решения, чем писать свой VB :)
Если нам не помогут, то мы тоже никого не пощадим.
Мне просто интересно было как это сделать на VC. Оказывается можно,
применив COleDispatchDriver. Главное знать имя объекта и его метод.
MB>>Я хочу создать событие по окончанию его выполнения. То есть, чтобы объект-сервер MB>>по завершению операции вызывал функцию-обработчик у своего клиента.
IT>Нужно сгенерировать событие.
Не могли бы Вы привести примерный код как это сделать.
Здравствуйте IT, вы писали:
IT>Нужно сгенерировать событие.
Проще, однако, воспользоваться CallBack-функцией, вот только я пока не представляю, каким образом это будет происходить между процессами или, скажем, в распределенной системе... Может кто расскажет?
IT>>Нужно сгенерировать событие.
TL>Проще, однако, воспользоваться CallBack-функцией, вот только я пока не представляю, каким образом это будет происходить между процессами или, скажем, в распределенной системе... Может кто расскажет?
Дык отож...
Давайте всё делать по-правилам, как предписывает дядя Бил.
ATL:
1. При создандии объекта визардом нужно не забыть установить флажок Support Connection Point. В этом случае будет создан ещё один интерфейс _IMyObjectEvents.
2. Определяем событие: на вкладке ClassView WorkSpace находим !интерфейс! _IMyObjectEvents, жмём правый мышь, жмём Add Method, задаём имя события и параметры.
3. Компилируем проект
4. В ClassView находим !класс! CMyObject, жмём правый мышь, жмём Implement Connection Point, установливаем флажок напротив _IMyObjectEvents, жмём Ok.
Готово.
Для генерации события нужно будет вызвать функцию Fire_MyEvent.
MFC:
Тут всё гораздо проще.
1. В MFC ClassWizard переходим на вкладку ActiveX Events, жмёи Add Event, вводим имя события, параметры, жмём Ok, готово.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте IT, вы писали:
IT>4. В ClassView находим !класс! CMyObject, жмём правый мышь, жмём Implement Connection Point, установливаем флажок напротив _IMyObjectEvents, жмём Ok.
Всё правильно, я хотел бы немного добавить (долго ходил вокруг этих граблей):
Если ваш проект в Source Safe,
Перед тем, как жать "Implement connection point", надо сделать "Check out", а то в списке интерфейсов ничего нет.