Как передать callback интерфейс в Out-of-Process сервер
От: Azir Беларусь  
Дата: 18.03.03 09:37
Оценка:
Есть Out-of-Process сервер. Один из интерфейсов сервера принимает указатель на интерфейс клиента. При наступлении определенных событий сервер использует методы клиентского интерфейса. У клиента реализован интерфейс, клиент не является COM объектом. В случае In-Process сервера мы имеем одно адресное пространство и указатель на клиентский интерфейс передаем без проблем. Как быть с Out-of-Process сервером? Вопрос, как я понимаю, сводится к тому, как сгенерировать proxy/stub.
Re: Как передать callback интерфейс в Out-of-Process сервер
От: Ivan Россия www.rsdn.ru
Дата: 18.03.03 09:40
Оценка: 14 (2)
Здравствуйте, Azir, Вы писали:

>Вопрос, как я понимаю, сводится к тому, как сгенерировать proxy/stub.

Для интерфейса нужно завести idl-файл (если еще нет) и желательно описать его с атрибутом "oleautomation" — это позволит использовать typelib маршалинг и не заморачиваться с proxy/stub'ами, но можно и без этого атрубита, тогда после компиляции idl midl'ом нужно скомпилировать dll для proxy/stub (файлы для этой dll создаст midl).
Еще один хороший вариант — использовать какой-нибудь стандартный интерфейс, для которого уже есть proxy/stub
Re[2]: Как передать callback интерфейс в Out-of-Process серв
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 18.03.03 09:44
Оценка: 6 (1)
Здравствуйте, Ivan, Вы писали:

[]

I>Еще один хороший вариант — использовать какой-нибудь стандартный интерфейс, для которого уже есть proxy/stub


Это тебе мягко намекают на IDispatch, но ты не слушай.
Лучше создай proxy/stub в виде отдельной DLL, тогда на клиента не нужно будет тащить весь сервер. (В данном случае клиент и сервер поменялись местами, т.к. речь идет о событиях).
Re[3]: Как передать callback интерфейс в Out-of-Process серв
От: Ivan Россия www.rsdn.ru
Дата: 18.03.03 10:01
Оценка: 12 (2)
Здравствуйте, Alexey Shirshov, Вы писали:

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


AS>Это тебе мягко намекают на IDispatch, но ты не слушай.

Нет, не dispatch
Можно использовать всякие IStream, IDataObject, Recordset и т.п. — для них не нужно proxy/stub, а данные передавать удобно.
Re[2]: Как передать callback интерфейс в Out-of-Process серв
От: Azir Беларусь  
Дата: 18.03.03 10:40
Оценка:
Здравствуйте, Ivan, Вы писали:

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


>>Вопрос, как я понимаю, сводится к тому, как сгенерировать proxy/stub.

I>Для интерфейса нужно завести idl-файл (если еще нет)
Сделано.

I> и желательно описать его с атрибутом "oleautomation"

Не выйдет, используются типы несовместимые с "oleautomation"

I> можно и без этого атрубита, тогда после компиляции idl midl'ом нужно скомпилировать dll для proxy/stub (файлы для этой dll создаст midl).

Сколько будет заглушек в случае использования midl-кода: одна (для всех интерфейсов) или две (одна для клиентского и одна для серверных интерфейсов)? Все интерфейсы описаны в одном файле.
Re[3]: Как передать callback интерфейс в Out-of-Process серв
От: Ivan Россия www.rsdn.ru
Дата: 18.03.03 10:46
Оценка:
Здравствуйте, Azir, Вы писали:

>Все интерфейсы описаны в одном файле.

Если под заглушками ты понимаешь модули dll, то модуль будет один, а COM-объектов заглушек будет столько, сколько интерфейсов описано в idl файле (на каждый интерфейс своя заглушка — stub).
Re: Как передать callback интерфейс в Out-of-Process сервер
От: Azir Беларусь  
Дата: 18.03.03 15:25
Оценка:
Здравствуйте, я — Azir, я писал:

A>Есть Out-of-Process сервер. Один из интерфейсов сервера принимает указатель на интерфейс клиента. При наступлении определенных событий сервер использует методы клиентского интерфейса. У клиента реализован интерфейс, клиент не является COM объектом. В случае In-Process сервера мы имеем одно адресное пространство и указатель на клиентский интерфейс передаем без проблем. Как быть с Out-of-Process сервером? Вопрос, как я понимаю, сводится к тому, как сгенерировать proxy/stub.


Проблема в том, что клиентский интерфейс передается в основной поток сервера, а используется в другом потоке (в этот поток указатель на клиентский интерфейс передается как параметр при создании потока). При вызове методов клиентского интерфейса из основного потока — все замечательно, но повторить это же в дочернем потоке не удается. Теперь я понимаю, нужно читать про межпоточный маршалинг.
Re[2]: Как передать callback интерфейс в Out-of-Process серв
От: Ivan Россия www.rsdn.ru
Дата: 18.03.03 16:00
Оценка:
Здравствуйте, Azir, Вы писали:

A>Теперь я понимаю, нужно читать про межпоточный маршалинг.


Ищи в форуме примеры для CoMarshalInterThreadInterfaceInStream
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.