Connection Point
От: Irisha  
Дата: 08.11.01 08:17
Оценка:
Привет всем!
У меня возникла следующая проблема. У меня есть ATL COM Server и MFC Client. В клиенте есть диалог, на котором и должна “отображаться” работа сервера, на пример, изменяться состояние radio button. Я создаю connection point
[id(2), helpstring("method EvSetState")] HRESULT EvSetState(long iNumber);
В клиенте пишу его реализацию. Вроде все работает нормально, когда я вызываю его из клиента. Но дело в том, что мне необходимо изменять диалог по условиям из сервера. (т.е. у меня есть класс в сервере, в котором проверяются какие- то условия). Так вот из класса реализации Com Object вызывается все прекрасно, происходит перерисовка, а вот из того класса, из которого надо – нет. Я не могу понять в чем проблема. Может кто-то с этим сталкивался?
P.S. надеюсь что понятно обрисовала проблему. J
Re: Connection Point
От: Аноним  
Дата: 08.11.01 09:19
Оценка:
Здравствуйте Irisha, Вы писали:

I>Привет всем!

I>У меня возникла следующая проблема. У меня есть ATL COM Server и MFC Client. В клиенте есть диалог, на котором и должна “отображаться” работа сервера, на пример, изменяться состояние radio button. Я создаю connection point
I> [id(2), helpstring("method EvSetState")] HRESULT EvSetState(long iNumber);
I>В клиенте пишу его реализацию. Вроде все работает нормально, когда я вызываю его из клиента. Но дело в том, что мне необходимо изменять диалог по условиям из сервера. (т.е. у меня есть класс в сервере, в котором проверяются какие- то условия). Так вот из класса реализации Com Object вызывается все прекрасно, происходит перерисовка, а вот из того класса, из которого надо – нет. Я не могу понять в чем проблема. Может кто-то с этим сталкивался?
I>P.S. надеюсь что понятно обрисовала проблему. J


Не очень. В любом случае — вот это не помогло — http://rsdn.ru/article/?mfc/connpts.xml
Автор(ы): Евгений Щербатов
Дата: 18.04.2001

Статья посвящена технологии Connection Points в программах на MFC. Автор кратко описывает сущность и назначение этой технологии, а затем демонстрирует создание COM-клиента и COM-сервера на базе MFC с её использованием.
?
Re[2]: Connection Point
От: Irisha  
Дата: 08.11.01 09:39
Оценка:
Здравствуйте Аноним, Вы писали:

А>Здравствуйте Irisha, Вы писали:


I>>Привет всем!

I>>У меня возникла следующая проблема. У меня есть ATL COM Server и MFC Client. В клиенте есть диалог, на котором и должна “отображаться” работа сервера, на пример, изменяться состояние radio button. Я создаю connection point
I>> [id(2), helpstring("method EvSetState")] HRESULT EvSetState(long iNumber);
I>>В клиенте пишу его реализацию. Вроде все работает нормально, когда я вызываю его из клиента. Но дело в том, что мне необходимо изменять диалог по условиям из сервера. (т.е. у меня есть класс в сервере, в котором проверяются какие- то условия). Так вот из класса реализации Com Object вызывается все прекрасно, происходит перерисовка, а вот из того класса, из которого надо – нет. Я не могу понять в чем проблема. Может кто-то с этим сталкивался?
I>>P.S. надеюсь что понятно обрисовала проблему. J


А>Не очень. В любом случае — вот это не помогло — http://rsdn.ru/article/?mfc/connpts.xml
Автор(ы): Евгений Щербатов
Дата: 18.04.2001

Статья посвящена технологии Connection Points в программах на MFC. Автор кратко описывает сущность и назначение этой технологии, а затем демонстрирует создание COM-клиента и COM-сервера на базе MFC с её использованием.
?


Эту статью я смотрела. Дело в том что MessageBox у меня тоже появляется, когда я его вызываю в самом клиенте(как и в примере статьи). А мне нужно чтобы сервер сам вызывал Fire_EvSetState(LONG iNumber) и причем делал это не в классе, где реализована Connection Point(с этим проблем нет), а в другом, где происходит обработка данных.
В этом классе я объявила указатель на класс CMyComObject и вызываю Fire_EvSetState(LONG iNumber). Функция возвращает 0, а в реализацию метода в клиенте EvSetState(long iNumber) даже не заходит.
Re[3]: Connection Point
От: Alik Украина  
Дата: 09.11.01 13:51
Оценка:
Здравствуйте Irisha, Вы писали:

I>Здравствуйте Аноним, Вы писали:


А>>Здравствуйте Irisha, Вы писали:


I>>>Привет всем!

I>>>У меня возникла следующая проблема. У меня есть ATL COM Server и MFC Client. В клиенте есть диалог, на котором и должна “отображаться” работа сервера, на пример, изменяться состояние radio button. Я создаю connection point
I>>> [id(2), helpstring("method EvSetState")] HRESULT EvSetState(long iNumber);
I>>>В клиенте пишу его реализацию. Вроде все работает нормально, когда я вызываю его из клиента. Но дело в том, что мне необходимо изменять диалог по условиям из сервера. (т.е. у меня есть класс в сервере, в котором проверяются какие- то условия). Так вот из класса реализации Com Object вызывается все прекрасно, происходит перерисовка, а вот из того класса, из которого надо – нет. Я не могу понять в чем проблема. Может кто-то с этим сталкивался?
I>>>P.S. надеюсь что понятно обрисовала проблему. J

В принципе, информации достаточно мало... На всякий случай укажу некоторые особенностти (возможно, что-то из них Вы не учли).
Насколько я понял, EvSetState — это и есть connection point. Тогда:
1. Ему следует возвращать void
2. он должен быть описан в dispinterface. например:
dispinterface _ICOMEventEvents
{
properties:
methods:
[id(2), helpstring("method EvSetState")] HRESULT EvSetState(long iNumber);
};
3. Сам dispinterface надо объявить как sourse. Например:
coclass COMApplicationComponent
{
[default] interface ICOMEvent;
[default, source] dispinterface _ICOMEventEvents;
};
4. Все, что отсуда вытекает
5. Может еще Вам поможет объявление ICOMEvent как dual

С уважением. Алик.
С уважением. Алик.
Re[4]: Connection Point
От: Irisha  
Дата: 12.11.01 08:32
Оценка:
Здравствуйте Alik, Вы писали:

A>В принципе, информации достаточно мало... На всякий случай укажу некоторые особенностти (возможно, что-то из них Вы не учли).

A>Насколько я понял, EvSetState — это и есть connection point. Тогда:
A>1. Ему следует возвращать void
A>2. он должен быть описан в dispinterface. например:
A>dispinterface _ICOMEventEvents
A>{
A>properties:
A>methods:
A>[id(2), helpstring("method EvSetState")] HRESULT EvSetState(long iNumber);
A>};
A>3. Сам dispinterface надо объявить как sourse. Например:
A>coclass COMApplicationComponent
A>{
A>[default] interface ICOMEvent;
A>[default, source] dispinterface _ICOMEventEvents;
A>};
A>4. Все, что отсуда вытекает
A>5. Может еще Вам поможет объявление ICOMEvent как dual

A>С уважением. Алик.


Все эти особенности у меня учтены (проверила еще раз). Но это не помогает.:-(
Спасибо за помощь.
Re: Connection Point
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.11.01 12:13
Оценка:
Здравствуйте Irisha, Вы писали:

I>Привет всем!

I>У меня возникла следующая проблема. У меня есть ATL COM Server и MFC Client. В клиенте есть диалог, на котором и должна “отображаться” работа сервера, на пример, изменяться состояние radio button. Я создаю connection point
I> [id(2), helpstring("method EvSetState")] HRESULT EvSetState(long iNumber);
I>В клиенте пишу его реализацию. Вроде все работает нормально, когда я вызываю его из клиента. Но дело в том, что мне необходимо изменять диалог по условиям из сервера. (т.е. у меня есть класс в сервере, в котором проверяются какие- то условия). Так вот из класса реализации Com Object вызывается все прекрасно, происходит перерисовка, а вот из того класса, из которого надо – нет. Я не могу понять в чем проблема. Может кто-то с этим сталкивался?
I>P.S. надеюсь что понятно обрисовала проблему. J


У меня такое было, когда сервер был ехе. Клиент не могет до него достучаться, посольку они вразных адресных пространствах. Я писал промежуточный объект, который может быть единственным на систему. Клиент и сервер коннектятся чз него. Каждый создает у себя экземпляр и кидает свой указатель. Потом связываются уе непосредственно чз коннекшнпоинт. Но там не все работало хорошо. Нужно было для этого объекта в idlине прописать oleautomation — чтобы для указателей использовался стандартный маршаллер.
Re[2]: Connection Point
От: Irisha  
Дата: 15.11.01 13:04
Оценка:
Здравствуйте Hollander, Вы писали:


H>У меня такое было, когда сервер был ехе. Клиент не могет до него достучаться, посольку они вразных адресных пространствах. Я писал промежуточный объект, который может быть единственным на систему. Клиент и сервер коннектятся чз него. Каждый создает у себя экземпляр и кидает свой указатель. Потом связываются уе непосредственно чз коннекшнпоинт. Но там не все работало хорошо. Нужно было для этого объекта в idlине прописать oleautomation — чтобы для указателей использовался стандартный маршаллер.


Огромное спасибо!!!
У меня действительно сервер .exe. Но я просто подумать не могла, что проблема в этом.
Еще раз огромное Вам спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.