Позднее связывание
От: MaxBond Россия  
Дата: 24.06.01 10:38
Оценка:
Помогите начинающему!
Ознакомился я со статьей "ВВедение в СОМ"
У меня есть COM-объект. В приложении клиенте я хочу
обращаться к методам этого объекта не зная его интерфейса.
Как это осуществить на VC++?
(В статье "введение в COM" показано как сделать это на VB.)

И еще такой вопрос. Допустим мой объект выполняет асинхронную операцию.
Я хочу создать событие по окончанию его выполнения. То есть, чтобы объект-сервер
по завершению операции вызывал функцию-обработчик у своего клиента.
Re: Позднее связывание
От: IT Россия linq2db.com
Дата: 24.06.01 13:11
Оценка:
MB>Ознакомился я со статьей "ВВедение в СОМ"
MB>У меня есть COM-объект. В приложении клиенте я хочу
MB>обращаться к методам этого объекта не зная его интерфейса.
MB>Как это осуществить на VC++?

Никак, это не возможно, интерфейс всё равно кто-то должен знать.
Посмотри вот это http://www.rsdn.ru/?article/?vcpp/import.xml
Автор(ы): Игорь Ткачёв
Дата: 9.03.2001

В данной статье приводится объяснение работы директивы #import
компилятора Visual C++ и даны примеры её использования с
MS Word, MS Excel, ADO DB и ActiveX Control.


MB>(В статье "введение в COM" показано как сделать это на VB.)


VB штука хорошая, особенно для демонстрации и тестирования.

MB>И еще такой вопрос. Допустим мой объект выполняет асинхронную операцию.

MB>Я хочу создать событие по окончанию его выполнения. То есть, чтобы объект-сервер
MB>по завершению операции вызывал функцию-обработчик у своего клиента.

Нужно сгенерировать событие.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Позднее связывание
От: IT Россия linq2db.com
Дата: 24.06.01 13:17
Оценка:
IT>Никак, это не возможно, интерфейс всё равно кто-то должен знать.

Не сразу разглядел тему топика :(
Если нужен сабж в полном объёме, то мне тебя откровенно жаль :) тут работки не на один месяц.
Посмотри реализацию CComDispatchDriver в ATL.
И если не секрет, то зачем тебе это? Всегда можно найти более простые решения, чем писать свой VB :)
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Позднее связывание
От: MaxBond Россия  
Дата: 24.06.01 14:37
Оценка:
Здравствуйте IT, вы писали:

IT>Никак, это не возможно, интерфейс всё равно кто-то должен знать.

IT>Посмотри вот это http://www.rsdn.ru/?article/?vcpp/import.xml
Автор(ы): Игорь Ткачёв
Дата: 9.03.2001

В данной статье приводится объяснение работы директивы #import
компилятора Visual C++ и даны примеры её использования с
MS Word, MS Excel, ADO DB и ActiveX Control.


Мне просто интересно было как это сделать на VC. Оказывается можно,
применив COleDispatchDriver. Главное знать имя объекта и его метод.

MB>>Я хочу создать событие по окончанию его выполнения. То есть, чтобы объект-сервер

MB>>по завершению операции вызывал функцию-обработчик у своего клиента.

IT>Нужно сгенерировать событие.


Не могли бы Вы привести примерный код как это сделать.
Re[2]: Позднее связывание
От: The Lex Украина  
Дата: 25.06.01 07:18
Оценка:
Здравствуйте IT, вы писали:

IT>Нужно сгенерировать событие.


Проще, однако, воспользоваться CallBack-функцией, вот только я пока не представляю, каким образом это будет происходить между процессами или, скажем, в распределенной системе... Может кто расскажет?
Голь на выдумку хитра, однако...
Re[3]: Позднее связывание
От: IT Россия linq2db.com
Дата: 25.06.01 12:21
Оценка:
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, готово.
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: Позднее связывание
От: Ростислав Глухов Россия http://www.geocities.com/rg2204/
Дата: 26.06.01 05:26
Оценка:
Здравствуйте IT, вы писали:

IT>4. В ClassView находим !класс! CMyObject, жмём правый мышь, жмём Implement Connection Point, установливаем флажок напротив _IMyObjectEvents, жмём Ok.


Всё правильно, я хотел бы немного добавить (долго ходил вокруг этих граблей):
Если ваш проект в Source Safe,
Перед тем, как жать "Implement connection point", надо сделать "Check out", а то в списке интерфейсов ничего нет.

Best regards.
- А Вы что курите?
— Минздрав предупреждает
Re[4]: Позднее связывание
От: MaxBond Россия  
Дата: 27.06.01 13:31
Оценка:
Хочу поблагодарить всех участвовавших в обсуждении за помощь
и данную полезную информацию...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.