Здравствуйте, Azir, Вы писали:
>Вопрос, как я понимаю, сводится к тому, как сгенерировать proxy/stub.
Для интерфейса нужно завести idl-файл (если еще нет) и желательно описать его с атрибутом "oleautomation" — это позволит использовать typelib маршалинг и не заморачиваться с proxy/stub'ами, но можно и без этого атрубита, тогда после компиляции idl midl'ом нужно скомпилировать dll для proxy/stub (файлы для этой dll создаст midl).
Еще один хороший вариант — использовать какой-нибудь стандартный интерфейс, для которого уже есть proxy/stub
Re[3]: Как передать callback интерфейс в Out-of-Process серв
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Здравствуйте, Ivan, Вы писали:
AS>Это тебе мягко намекают на IDispatch, но ты не слушай.
Нет, не dispatch
Можно использовать всякие IStream, IDataObject, Recordset и т.п. — для них не нужно proxy/stub, а данные передавать удобно.
Re[2]: Как передать callback интерфейс в Out-of-Process серв
[]
I>Еще один хороший вариант — использовать какой-нибудь стандартный интерфейс, для которого уже есть proxy/stub
Это тебе мягко намекают на IDispatch, но ты не слушай.
Лучше создай proxy/stub в виде отдельной DLL, тогда на клиента не нужно будет тащить весь сервер. (В данном случае клиент и сервер поменялись местами, т.к. речь идет о событиях).
Как передать callback интерфейс в Out-of-Process сервер
Есть Out-of-Process сервер. Один из интерфейсов сервера принимает указатель на интерфейс клиента. При наступлении определенных событий сервер использует методы клиентского интерфейса. У клиента реализован интерфейс, клиент не является COM объектом. В случае In-Process сервера мы имеем одно адресное пространство и указатель на клиентский интерфейс передаем без проблем. Как быть с Out-of-Process сервером? Вопрос, как я понимаю, сводится к тому, как сгенерировать proxy/stub.
Re[2]: Как передать callback интерфейс в Out-of-Process серв
Здравствуйте, 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 серв
Здравствуйте, Azir, Вы писали:
>Все интерфейсы описаны в одном файле.
Если под заглушками ты понимаешь модули dll, то модуль будет один, а COM-объектов заглушек будет столько, сколько интерфейсов описано в idl файле (на каждый интерфейс своя заглушка — stub).
Re: Как передать callback интерфейс в Out-of-Process сервер
Здравствуйте, я — Azir, я писал:
A>Есть Out-of-Process сервер. Один из интерфейсов сервера принимает указатель на интерфейс клиента. При наступлении определенных событий сервер использует методы клиентского интерфейса. У клиента реализован интерфейс, клиент не является COM объектом. В случае In-Process сервера мы имеем одно адресное пространство и указатель на клиентский интерфейс передаем без проблем. Как быть с Out-of-Process сервером? Вопрос, как я понимаю, сводится к тому, как сгенерировать proxy/stub.
Проблема в том, что клиентский интерфейс передается в основной поток сервера, а используется в другом потоке (в этот поток указатель на клиентский интерфейс передается как параметр при создании потока). При вызове методов клиентского интерфейса из основного потока — все замечательно, но повторить это же в дочернем потоке не удается. Теперь я понимаю, нужно читать про межпоточный маршалинг.
Re[2]: Как передать callback интерфейс в Out-of-Process серв