Привет всем!
У меня возникла следующая проблема. У меня есть 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
Здравствуйте Аноним, Вы писали:
А>Здравствуйте 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
Эту статью я смотрела. Дело в том что MessageBox у меня тоже появляется, когда я его вызываю в самом клиенте(как и в примере статьи). А мне нужно чтобы сервер сам вызывал Fire_EvSetState(LONG iNumber) и причем делал это не в классе, где реализована Connection Point(с этим проблем нет), а в другом, где происходит обработка данных.
В этом классе я объявила указатель на класс CMyComObject и вызываю Fire_EvSetState(LONG iNumber). Функция возвращает 0, а в реализацию метода в клиенте EvSetState(long iNumber) даже не заходит.
Здравствуйте 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
Здравствуйте 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>С уважением. Алик.
Все эти особенности у меня учтены (проверила еще раз). Но это не помогает.:-(
Спасибо за помощь.
Здравствуйте 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 — чтобы для указателей использовался стандартный маршаллер.
H>У меня такое было, когда сервер был ехе. Клиент не могет до него достучаться, посольку они вразных адресных пространствах. Я писал промежуточный объект, который может быть единственным на систему. Клиент и сервер коннектятся чз него. Каждый создает у себя экземпляр и кидает свой указатель. Потом связываются уе непосредственно чз коннекшнпоинт. Но там не все работало хорошо. Нужно было для этого объекта в idlине прописать oleautomation — чтобы для указателей использовался стандартный маршаллер.
Огромное спасибо!!!
У меня действительно сервер .exe. Но я просто подумать не могла, что проблема в этом.
Еще раз огромное Вам спасибо!