Re[9]: Универсальный маршалинг
От: Onorin Нигерия  
Дата: 19.07.06 11:33
Оценка: +1
Здравствуйте, Аноним, Вы писали:

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


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


O>>>>Универсальный маршалинг может используется для интерфейса, в котором все параметры методов имеют variant-совместимый тип.


А>>>и что?

А>>>я говорю про маршалинг интерфейсного указателя, который является кастомным интерфейсом

O>>Использование универсального маршалига вовсе не означает, что пересылаемый интерфейс должен быть произведен от IDispatch. Он применяется для любого интерфейса, но при условии что все параметры методов имеют variant-совместимый тип!



А>хоть бы кто нить объяснил каким образом в универсальном маршалинге генерится, создаётся прокся/заглушка...


Универсальный маршалинг базируется на oleaut32.dll
Универсальный маршалинг
От: Аноним  
Дата: 17.07.06 19:58
Оценка:
Рзбираясь с архитектурой возник следующий вопросик... В случае стандартного маршалинга компилятор MIDL генерит проксю/заглушку которая является обьъектом с поддержкой маршалирумого интерфейса. Соответственно для создания прокси активируется объект с IID прокси и объект заглушки, которые живут в этой dll. Тут всё понятно. Непонятно каким образом осуществляется маршалинг через универсальный механизм автоматизации когда для любого объекта используется одна и таже универсальная прокся/заглушка. Если вызов осуществляется через диспатч, то понятно что объект с поддержкой iDispatch зашит в универсальную dll, а если выхов идёт через кастом интерфейс или в качесте параметров передаются кастомные интерфейсы то как всё работает?
Re: Универсальный маршалинг
От: AndrewJD США  
Дата: 18.07.06 08:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Рзбираясь с архитектурой возник следующий вопросик... В случае стандартного маршалинга компилятор MIDL генерит проксю/заглушку которая является обьъектом с поддержкой маршалирумого интерфейса. Соответственно для создания прокси активируется объект с IID прокси и объект заглушки, которые живут в этой dll. Тут всё понятно. Непонятно каким образом осуществляется маршалинг через универсальный механизм автоматизации когда для любого объекта используется одна и таже универсальная прокся/заглушка. Если вызов осуществляется через диспатч, то понятно что объект с поддержкой iDispatch зашит в универсальную dll, а если выхов идёт через кастом интерфейс или в качесте параметров передаются кастомные интерфейсы то как всё работает?


Если ты про typelib маршалинг — то только стандартные типы и интерфейсы(IDispatch) автоматически маршалятся.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[2]: Универсальный маршалинг
От: Аноним  
Дата: 18.07.06 09:16
Оценка:
Здравствуйте, AndrewJD, Вы писали:

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


А>>Рзбираясь с архитектурой возник следующий вопросик... В случае стандартного маршалинга компилятор MIDL генерит проксю/заглушку которая является обьъектом с поддержкой маршалирумого интерфейса. Соответственно для создания прокси активируется объект с IID прокси и объект заглушки, которые живут в этой dll. Тут всё понятно. Непонятно каким образом осуществляется маршалинг через универсальный механизм автоматизации когда для любого объекта используется одна и таже универсальная прокся/заглушка. Если вызов осуществляется через диспатч, то понятно что объект с поддержкой iDispatch зашит в универсальную dll, а если выхов идёт через кастом интерфейс или в качесте параметров передаются кастомные интерфейсы то как всё работает?


AJD>Если ты про typelib маршалинг — то только стандартные типы и интерфейсы(IDispatch) автоматически маршалятся.


Делаю произвольный интерфес с поддержкой диспатча, дёргаю из С++ кода методы этого объекта через raw интерфейс — всё нормально маршалится, как это происходит?
Re[3]: Универсальный маршалинг
От: Константин Л.  
Дата: 18.07.06 09:51
Оценка:
Здравствуйте, Аноним, Вы писали:

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


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


А>>>Рзбираясь с архитектурой возник следующий вопросик... В случае стандартного маршалинга компилятор MIDL генерит проксю/заглушку которая является обьъектом с поддержкой маршалирумого интерфейса. Соответственно для создания прокси активируется объект с IID прокси и объект заглушки, которые живут в этой dll. Тут всё понятно. Непонятно каким образом осуществляется маршалинг через универсальный механизм автоматизации когда для любого объекта используется одна и таже универсальная прокся/заглушка. Если вызов осуществляется через диспатч, то понятно что объект с поддержкой iDispatch зашит в универсальную dll, а если выхов идёт через кастом интерфейс или в качесте параметров передаются кастомные интерфейсы то как всё работает?


AJD>>Если ты про typelib маршалинг — то только стандартные типы и интерфейсы(IDispatch) автоматически маршалятся.


А>Делаю произвольный интерфес с поддержкой диспатча, дёргаю из С++ кода методы этого объекта через raw интерфейс — всё нормально маршалится, как это происходит?


давай подробнее, как делаешь, что делаешь
Re[4]: Универсальный маршалинг
От: Аноним  
Дата: 18.07.06 11:06
Оценка:
Здравствуйте, Константин Л., Вы писали:

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


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


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


А>>>>Рзбираясь с архитектурой возник следующий вопросик... В случае стандартного маршалинга компилятор MIDL генерит проксю/заглушку которая является обьъектом с поддержкой маршалирумого интерфейса. Соответственно для создания прокси активируется объект с IID прокси и объект заглушки, которые живут в этой dll. Тут всё понятно. Непонятно каким образом осуществляется маршалинг через универсальный механизм автоматизации когда для любого объекта используется одна и таже универсальная прокся/заглушка. Если вызов осуществляется через диспатч, то понятно что объект с поддержкой iDispatch зашит в универсальную dll, а если выхов идёт через кастом интерфейс или в качесте параметров передаются кастомные интерфейсы то как всё работает?


AJD>>>Если ты про typelib маршалинг — то только стандартные типы и интерфейсы(IDispatch) автоматически маршалятся.


А>>Делаю произвольный интерфес с поддержкой диспатча, дёргаю из С++ кода методы этого объекта через raw интерфейс — всё нормально маршалится, как это происходит?


КЛ>давай подробнее, как делаешь, что делаешь


Пример:
делаю outproc сервер с объектом с поддержкой IDraw
interface IDraw: IDispatch {
   [id(1), helpstring("method Draw")] HRESULT Init([in] BSTR txt);
}


В коде делаю

   IDrawPtr pObj = NULL;
   pObj.CreateInstance(__uuidof(Draw));
   pObj->Init(_bstr_t("Hi"));


Каким образом создаётся прокся и реализуется вызов метода?
Re[5]: Универсальный маршалинг
От: Константин Л.  
Дата: 18.07.06 12:14
Оценка:
Здравствуйте, Аноним, Вы писали:

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


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


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


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


А>>>>>Рзбираясь с архитектурой возник следующий вопросик... В случае стандартного маршалинга компилятор MIDL генерит проксю/заглушку которая является обьъектом с поддержкой маршалирумого интерфейса. Соответственно для создания прокси активируется объект с IID прокси и объект заглушки, которые живут в этой dll. Тут всё понятно. Непонятно каким образом осуществляется маршалинг через универсальный механизм автоматизации когда для любого объекта используется одна и таже универсальная прокся/заглушка. Если вызов осуществляется через диспатч, то понятно что объект с поддержкой iDispatch зашит в универсальную dll, а если выхов идёт через кастом интерфейс или в качесте параметров передаются кастомные интерфейсы то как всё работает?


AJD>>>>Если ты про typelib маршалинг — то только стандартные типы и интерфейсы(IDispatch) автоматически маршалятся.


А>>>Делаю произвольный интерфес с поддержкой диспатча, дёргаю из С++ кода методы этого объекта через raw интерфейс — всё нормально маршалится, как это происходит?


КЛ>>давай подробнее, как делаешь, что делаешь


А>Пример:

А>делаю outproc сервер с объектом с поддержкой IDraw
А>
А>interface IDraw: IDispatch {
А>   [id(1), helpstring("method Draw")] HRESULT Init([in] BSTR txt);
А>}
А>


А>В коде делаю


А>
А>   IDrawPtr pObj = NULL;
А>   pObj.CreateInstance(__uuidof(Draw));
   pObj->>Init(_bstr_t("Hi"));
А>


А>Каким образом создаётся прокся и реализуется вызов метода?


На основе IDL описания генерится код proxy-stub и все работает
Re[6]: Универсальный маршалинг
От: Аноним  
Дата: 18.07.06 12:45
Оценка:
КЛ>На основе IDL описания генерится код proxy-stub и все работает

Нифига, код то генерится, но его я не компилю, и прокся/заглушка зарегистрирована соотвественно универсальная!
Re[7]: Универсальный маршалинг
От: Константин Л.  
Дата: 18.07.06 13:05
Оценка:
Здравствуйте, Аноним, Вы писали:

КЛ>>На основе IDL описания генерится код proxy-stub и все работает


А>Нифига, код то генерится, но его я не компилю, и прокся/заглушка зарегистрирована соотвественно универсальная!


1) что значит " но его я не компилю"?
2) а ты уверен, что у тебя маршалинг вообще вступает в дело? Небось сделал apartment-threaded inproc сервер и зовешь из apartment-threaded клиента
Re[8]: Универсальный маршалинг
От: Аноним  
Дата: 18.07.06 13:08
Оценка:
Здравствуйте, Константин Л., Вы писали:

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


КЛ>>>На основе IDL описания генерится код proxy-stub и все работает


А>>Нифига, код то генерится, но его я не компилю, и прокся/заглушка зарегистрирована соотвественно универсальная!


КЛ>1) что значит " но его я не компилю"?

КЛ>2) а ты уверен, что у тебя маршалинг вообще вступает в дело? Небось сделал apartment-threaded inproc сервер и зовешь из apartment-threaded клиента

конечно, учитывая что сервер outproc
Re[8]: Универсальный маршалинг
От: Аноним  
Дата: 18.07.06 13:09
Оценка:
Здравствуйте, Константин Л., Вы писали:
КЛ>1) что значит " но его я не компилю"?

Значит что midl генерит сурсы и make файл для заглушки, я её не собираю
Re[9]: Универсальный маршалинг
От: Константин Л.  
Дата: 18.07.06 13:24
Оценка:
Здравствуйте, Аноним, Вы писали:

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


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


КЛ>>>>На основе IDL описания генерится код proxy-stub и все работает


А>>>Нифига, код то генерится, но его я не компилю, и прокся/заглушка зарегистрирована соотвественно универсальная!


КЛ>>1) что значит " но его я не компилю"?

КЛ>>2) а ты уверен, что у тебя маршалинг вообще вступает в дело? Небось сделал apartment-threaded inproc сервер и зовешь из apartment-threaded клиента

А>конечно, учитывая что сервер outproc


сорри, не заметил
Re[9]: Универсальный маршалинг
От: Константин Л.  
Дата: 18.07.06 13:26
Оценка:
Здравствуйте, Аноним, Вы писали:

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

КЛ>>1) что значит " но его я не компилю"?

А>Значит что midl генерит сурсы и make файл для заглушки, я её не собираю


мммм, затрудняюсь ответить. Значит работает дефолтный RPC маршалер
Re[10]: Универсальный маршалинг
От: Аноним  
Дата: 18.07.06 13:38
Оценка:
Здравствуйте, Константин Л., Вы писали:

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


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

КЛ>>>1) что значит " но его я не компилю"?

А>>Значит что midl генерит сурсы и make файл для заглушки, я её не собираю


КЛ>мммм, затрудняюсь ответить. Значит работает дефолтный RPC маршалер


дык, нужно создать объект проксиЮ, которая поддерживает интерфейс, который она маршалит, непонятно как это может быть реализовано в рамках одной стандартной dll универсального маршалинга.

PS Как вы убеждаетесь умные слова от МС не объясняют сути происходящего — всё очень нетривиально...
Re[11]: Универсальный маршалинг
От: Константин Л.  
Дата: 18.07.06 14:08
Оценка:
Здравствуйте, Аноним, Вы писали:

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


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


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

КЛ>>>>1) что значит " но его я не компилю"?

А>>>Значит что midl генерит сурсы и make файл для заглушки, я её не собираю


КЛ>>мммм, затрудняюсь ответить. Значит работает дефолтный RPC маршалер


А>дык, нужно создать объект проксиЮ, которая поддерживает интерфейс, который она маршалит, непонятно как это может быть реализовано в рамках одной стандартной dll универсального маршалинга.


А>PS Как вы убеждаетесь умные слова от МС не объясняют сути происходящего — всё очень нетривиально...


имхо дело в том, что ты гоняешь простые ole-automation типы, которые ole32.dll умеет маршалить. Попробуй добавь в качестве параметра метода какую нить структурку или интерфейс, и посмотрим, что будет
Re[12]: Универсальный маршалинг
От: Аноним  
Дата: 18.07.06 14:30
Оценка:
Здравствуйте, Константин Л., Вы писали:

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


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


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


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

КЛ>>>>>1) что значит " но его я не компилю"?

А>>>>Значит что midl генерит сурсы и make файл для заглушки, я её не собираю


КЛ>>>мммм, затрудняюсь ответить. Значит работает дефолтный RPC маршалер


А>>дык, нужно создать объект проксиЮ, которая поддерживает интерфейс, который она маршалит, непонятно как это может быть реализовано в рамках одной стандартной dll универсального маршалинга.


А>>PS Как вы убеждаетесь умные слова от МС не объясняют сути происходящего — всё очень нетривиально...


КЛ>имхо дело в том, что ты гоняешь простые ole-automation типы, которые ole32.dll умеет маршалить. Попробуй добавь в качестве параметра метода какую нить структурку или интерфейс, и посмотрим, что будет


он для начала должен отмаршалить ИНТЕФРЕЙС, создать объект (проксю), поддерживающий интерфейс отмарщаленной интерфейсной ссылки, как он это делает? То что типы должны быть ole cpmliant понятно, это не объясняет технику маршалинга кастомного интерфейса
Re[13]: Универсальный маршалинг
От: Константин Л.  
Дата: 18.07.06 14:35
Оценка:
Здравствуйте, Аноним, Вы писали:

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


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


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


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


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

КЛ>>>>>>1) что значит " но его я не компилю"?

А>>>>>Значит что midl генерит сурсы и make файл для заглушки, я её не собираю


КЛ>>>>мммм, затрудняюсь ответить. Значит работает дефолтный RPC маршалер


А>>>дык, нужно создать объект проксиЮ, которая поддерживает интерфейс, который она маршалит, непонятно как это может быть реализовано в рамках одной стандартной dll универсального маршалинга.


А>>>PS Как вы убеждаетесь умные слова от МС не объясняют сути происходящего — всё очень нетривиально...


КЛ>>имхо дело в том, что ты гоняешь простые ole-automation типы, которые ole32.dll умеет маршалить. Попробуй добавь в качестве параметра метода какую нить структурку или интерфейс, и посмотрим, что будет


А>он для начала должен отмаршалить ИНТЕФРЕЙС, создать объект (проксю), поддерживающий интерфейс отмарщаленной интерфейсной ссылки, как он это делает?

понятное дело должен, а как он это делает — хз. Может он для IDispatch маршалер делает. Ты точно p/s не собирал/регил?
А>То что типы должны быть ole cpmliant понятно, это не объясняет технику маршалинга кастомного интерфейса
Re[13]: Универсальный маршалинг
От: AndrewJD США  
Дата: 18.07.06 14:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>он для начала должен отмаршалить ИНТЕФРЕЙС, создать объект (проксю), поддерживающий интерфейс отмарщаленной интерфейсной ссылки, как он это делает? То что типы должны быть ole cpmliant понятно, это не объясняет технику маршалинга кастомного интерфейса


В библиотеке типов описана структура твоего интерфейса, типы параметры и в каком порядке они передаются. Создать в памяти структуку с указателями на заглушки не сложно.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[14]: Универсальный маршалинг
От: Аноним  
Дата: 18.07.06 14:48
Оценка:
Здравствуйте, Константин Л., Вы писали:
КЛ>понятное дело должен, а как он это делает — хз. Может он для IDispatch маршалер делает. Ты точно p/s не собирал/регил?
нет конечно. если делает для диспатч то кто то должен поборачивать вызовы все чере з диспатч, и это будет жутко тормозить
Re[15]: Универсальный маршалинг
От: Константин Л.  
Дата: 18.07.06 14:56
Оценка:
Здравствуйте, Аноним, Вы писали:

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

КЛ>>понятное дело должен, а как он это делает — хз. Может он для IDispatch маршалер делает. Ты точно p/s не собирал/регил?
А>нет конечно. если делает для диспатч то кто то должен поборачивать вызовы все чере з диспатч, и это будет жутко тормозить
а ты при outproc сервере vtbl хотел
Re[16]: Универсальный маршалинг
От: Аноним  
Дата: 18.07.06 15:03
Оценка:
Здравствуйте, Константин Л., Вы писали:

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


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

КЛ>>>понятное дело должен, а как он это делает — хз. Может он для IDispatch маршалер делает. Ты точно p/s не собирал/регил?
А>>нет конечно. если делает для диспатч то кто то должен поборачивать вызовы все чере з диспатч, и это будет жутко тормозить
КЛ>а ты при outproc сервере vtbl хотел

не хотел, но при inproc в межаппартаментных вызовах не отказался бы
Re[16]: Универсальный маршалинг
От: AndrewJD США  
Дата: 18.07.06 15:05
Оценка:
Здравствуйте, Константин Л., Вы писали:

А>>нет конечно. если делает для диспатч то кто то должен поборачивать вызовы все чере з диспатч, и это будет жутко тормозить

КЛ>а ты при outproc сервере vtbl хотел

Можно запросто управлять Internet Explorer через vtbl. И он определенно outproc сервер
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[17]: Универсальный маршалинг
От: Константин Л.  
Дата: 18.07.06 15:19
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>Здравствуйте, Константин Л., Вы писали:


А>>>нет конечно. если делает для диспатч то кто то должен поборачивать вызовы все чере з диспатч, и это будет жутко тормозить

КЛ>>а ты при outproc сервере vtbl хотел

AJD>Можно запросто управлять Internet Explorer через vtbl. И он определенно outproc сервер


из другого процесса создав его с CLSCTX_LOCAL_SERVER? код в студию.
Re[18]: Универсальный маршалинг
От: AndrewJD США  
Дата: 18.07.06 15:39
Оценка:
Здравствуйте, Константин Л., Вы писали:

AJD>>Можно запросто управлять Internet Explorer через vtbl. И он определенно outproc сервер


КЛ>из другого процесса создав его с CLSCTX_LOCAL_SERVER? код в студию.


Да вот, стандартный пример
Автор(ы): Тимофей Чадов
Дата: 14.03.2002
.
IWebBrowser2 интерфейс можно рассматривать как кастомный интерфейс. Но маршалится он все таки как IDispatch
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[19]: Универсальный маршалинг
От: Константин Л.  
Дата: 18.07.06 15:56
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>Здравствуйте, Константин Л., Вы писали:


AJD>>>Можно запросто управлять Internet Explorer через vtbl. И он определенно outproc сервер


КЛ>>из другого процесса создав его с CLSCTX_LOCAL_SERVER? код в студию.


AJD>Да вот, стандартный пример
Автор(ы): Тимофей Чадов
Дата: 14.03.2002
.

AJD>IWebBrowser2 интерфейс можно рассматривать как кастомный интерфейс. Но маршалится он все таки как IDispatch

так я и думал. IWebBrowser2 внутри делает колы к outproc ie,we, так что это не считается
Re[20]: Универсальный маршалинг
От: AndrewJD США  
Дата: 18.07.06 16:54
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>так я и думал. IWebBrowser2 внутри делает колы к outproc ie,we, так что это не считается

Это как? И где это внутри?
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[5]: Универсальный маршалинг
От: ant_katcin Россия  
Дата: 18.07.06 17:08
Оценка:
Здравствуйте, <Аноним>, Вы писали:

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


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


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


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


А>>>>>Рзбираясь с архитектурой возник следующий вопросик... В случае стандартного маршалинга компилятор MIDL генерит проксю/заглушку которая является обьъектом с поддержкой маршалирумого интерфейса. Соответственно для создания прокси активируется объект с IID прокси и объект заглушки, которые живут в этой dll. Тут всё понятно. Непонятно каким образом осуществляется маршалинг через универсальный механизм автоматизации когда для любого объекта используется одна и таже универсальная прокся/заглушка. Если вызов осуществляется через диспатч, то понятно что объект с поддержкой iDispatch зашит в универсальную dll, а если выхов идёт через кастом интерфейс или в качесте параметров передаются кастомные интерфейсы то как всё работает?


AJD>>>>Если ты про typelib маршалинг — то только стандартные типы и интерфейсы(IDispatch) автоматически маршалятся.


А>>>Делаю произвольный интерфес с поддержкой диспатча, дёргаю из С++ кода методы этого объекта через raw интерфейс — всё нормально маршалится, как это происходит?


КЛ>>давай подробнее, как делаешь, что делаешь


А>Пример:

А>делаю outproc сервер с объектом с поддержкой IDraw
А>
А>interface IDraw: IDispatch {
А>   [id(1), helpstring("method Draw")] HRESULT Init([in] BSTR txt);
А>}
А>


А>В коде делаю


А>
А>   IDrawPtr pObj = NULL;
А>   pObj.CreateInstance(__uuidof(Draw));
   pObj->>Init(_bstr_t("Hi"));
А>


А>Каким образом создаётся прокся и реализуется вызов метода?


Универсальный маршаллинг использует заглушки из oleaut32.dll. Использует он эту заглушку если для интерфейса стоит аттрибут IDL [oleautomation]
Сказать каким образом эти заглушки маршалят все variant-совместимые интерфейсы я не могу,т.к. не знаю. Конечно можно пофантазировать, но я воздержусь.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[19]: Универсальный маршалинг
От: Аноним  
Дата: 19.07.06 06:43
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>Здравствуйте, Константин Л., Вы писали:


AJD>>>Можно запросто управлять Internet Explorer через vtbl. И он определенно outproc сервер


КЛ>>из другого процесса создав его с CLSCTX_LOCAL_SERVER? код в студию.


AJD>Да вот, стандартный пример
Автор(ы): Тимофей Чадов
Дата: 14.03.2002
.

AJD>IWebBrowser2 интерфейс можно рассматривать как кастомный интерфейс. Но маршалится он все таки как IDispatch

я так и предполагаю. уже, а как это технически сделано, если прокся создаваемая должнаподдерживать интерфейс того же IWebBrowser, и получается уже внутри вызово методов преобразовывать в вызовы через dispatch и маршалить dispatch — вызовы.
Re[5]: Универсальный маршалинг
От: Onorin Нигерия  
Дата: 19.07.06 06:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Пример:

А>делаю outproc сервер с объектом с поддержкой IDraw
А>
А>interface IDraw: IDispatch {
А>   [id(1), helpstring("method Draw")] HRESULT Init([in] BSTR txt);
А>}
А>


А>В коде делаю


А>
А>   IDrawPtr pObj = NULL;
А>   pObj.CreateInstance(__uuidof(Draw));
   pObj->>Init(_bstr_t("Hi"));
А>


А>Каким образом создаётся прокся и реализуется вызов метода?


Универсальный маршалинг может используется для интерфейса, в котором все параметры методов имеют variant-совместимый тип.
Re[6]: Универсальный маршалинг
От: Аноним  
Дата: 19.07.06 08:02
Оценка:
Здравствуйте, Onorin, Вы писали:

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


А>>Пример:

А>>делаю outproc сервер с объектом с поддержкой IDraw
А>>
А>>interface IDraw: IDispatch {
А>>   [id(1), helpstring("method Draw")] HRESULT Init([in] BSTR txt);
А>>}
А>>


А>>В коде делаю


А>>
А>>   IDrawPtr pObj = NULL;
А>>   pObj.CreateInstance(__uuidof(Draw));
   pObj->>>Init(_bstr_t("Hi"));
А>>


А>>Каким образом создаётся прокся и реализуется вызов метода?


O>Универсальный маршалинг может используется для интерфейса, в котором все параметры методов имеют variant-совместимый тип.


и что?
я говорю про маршалинг интерфейсного указателя, который является кастомным интерфейсом
Re[7]: Универсальный маршалинг
От: Vi2 Удмуртия http://www.adem.ru
Дата: 19.07.06 08:45
Оценка:
Здравствуйте, Аноним, Вы писали:

O>>Универсальный маршалинг может используется для интерфейса, в котором все параметры методов имеют variant-совместимый тип.

А>и что? я говорю про маршалинг интерфейсного указателя, который является кастомным интерфейсом

Любой интерфейс описан в Реестре в секции HKCR\Interface\{IID}. Там есть поле ProxyStubClsid32, которое отвечает за то, кто будет маршаллить этот интерфейс (при необходимости). Если интерфейса нет в Реестре, то он не будет маршалится и прокси/стаб для него не создается.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[8]: Универсальный маршалинг
От: Аноним  
Дата: 19.07.06 09:01
Оценка:
Здравствуйте, Vi2, Вы писали:

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


O>>>Универсальный маршалинг может используется для интерфейса, в котором все параметры методов имеют variant-совместимый тип.

А>>и что? я говорю про маршалинг интерфейсного указателя, который является кастомным интерфейсом

Vi2>Любой интерфейс описан в Реестре в секции HKCR\Interface\{IID}. Там есть поле ProxyStubClsid32, которое отвечает за то, кто будет маршаллить этот интерфейс (при необходимости). Если интерфейса нет в Реестре, то он не будет маршалится и прокси/стаб для него не создается.


интерфейс точно маршалится. так как сервер outprov и проксм/стаб я не компилил которую создал midl компилятор. Выставлен атрибут oleautomation.
Re[7]: Универсальный маршалинг
От: Onorin Нигерия  
Дата: 19.07.06 09:21
Оценка:
Здравствуйте, Аноним, Вы писали:

O>>Универсальный маршалинг может используется для интерфейса, в котором все параметры методов имеют variant-совместимый тип.


А>и что?

А>я говорю про маршалинг интерфейсного указателя, который является кастомным интерфейсом

Использование универсального маршалига вовсе не означает, что пересылаемый интерфейс должен быть произведен от IDispatch. Он применяется для любого интерфейса, но при условии что все параметры методов имеют variant-совместимый тип!
Re[21]: Универсальный маршалинг
От: Константин Л.  
Дата: 19.07.06 09:32
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>Здравствуйте, Константин Л., Вы писали:


КЛ>>так я и думал. IWebBrowser2 внутри делает колы к outproc ie,we, так что это не считается

AJD>Это как? И где это внутри?

ну, допустим, ты вызываешь get_Document, и внутри get_Document inproc IWebBrowser2 делает кол к outproc ie. Просто делегирует вызовы
Re[8]: Универсальный маршалинг
От: Аноним  
Дата: 19.07.06 10:46
Оценка:
Здравствуйте, Onorin, Вы писали:

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


O>>>Универсальный маршалинг может используется для интерфейса, в котором все параметры методов имеют variant-совместимый тип.


А>>и что?

А>>я говорю про маршалинг интерфейсного указателя, который является кастомным интерфейсом

O>Использование универсального маршалига вовсе не означает, что пересылаемый интерфейс должен быть произведен от IDispatch. Он применяется для любого интерфейса, но при условии что все параметры методов имеют variant-совместимый тип!



хоть бы кто нить объяснил каким образом в универсальном маршалинге генерится, создаётся прокся/заглушка...
Re[9]: Универсальный маршалинг
От: Константин Л.  
Дата: 19.07.06 10:52
Оценка:
Здравствуйте, Аноним, Вы писали:

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


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


O>>>>Универсальный маршалинг может используется для интерфейса, в котором все параметры методов имеют variant-совместимый тип.


А>>>и что?

А>>>я говорю про маршалинг интерфейсного указателя, который является кастомным интерфейсом

O>>Использование универсального маршалига вовсе не означает, что пересылаемый интерфейс должен быть произведен от IDispatch. Он применяется для любого интерфейса, но при условии что все параметры методов имеют variant-совместимый тип!



А>хоть бы кто нить объяснил каким образом в универсальном маршалинге генерится, создаётся прокся/заглушка...

скорее всего ниче там не генерится, а просто variant-совместимые параметры любого метода кастомного интерфейса пакуются и все
Re[10]: Универсальный маршалинг
От: Аноним  
Дата: 19.07.06 11:05
Оценка:
Здравствуйте, Константин Л., Вы писали:

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


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


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


O>>>>>Универсальный маршалинг может используется для интерфейса, в котором все параметры методов имеют variant-совместимый тип.


А>>>>и что?

А>>>>я говорю про маршалинг интерфейсного указателя, который является кастомным интерфейсом

O>>>Использование универсального маршалига вовсе не означает, что пересылаемый интерфейс должен быть произведен от IDispatch. Он применяется для любого интерфейса, но при условии что все параметры методов имеют variant-совместимый тип!



А>>хоть бы кто нить объяснил каким образом в универсальном маршалинге генерится, создаётся прокся/заглушка...

КЛ>скорее всего ниче там не генерится, а просто variant-совместимые параметры любого метода кастомного интерфейса пакуются и все

Кто пакует, куда пакует. Когда ты делаешь CreateInstance outproc объекта ты должен получить проксю с этим интерфейсом объекта, откуда она берётся...
Re[11]: Универсальный маршалинг
От: Константин Л.  
Дата: 19.07.06 11:17
Оценка:
Здравствуйте, Аноним, Вы писали:

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


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


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


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


O>>>>>>Универсальный маршалинг может используется для интерфейса, в котором все параметры методов имеют variant-совместимый тип.


А>>>>>и что?

А>>>>>я говорю про маршалинг интерфейсного указателя, который является кастомным интерфейсом

O>>>>Использование универсального маршалига вовсе не означает, что пересылаемый интерфейс должен быть произведен от IDispatch. Он применяется для любого интерфейса, но при условии что все параметры методов имеют variant-совместимый тип!



А>>>хоть бы кто нить объяснил каким образом в универсальном маршалинге генерится, создаётся прокся/заглушка...

КЛ>>скорее всего ниче там не генерится, а просто variant-совместимые параметры любого метода кастомного интерфейса пакуются и все

А>Кто пакует, куда пакует. Когда ты делаешь CreateInstance outproc объекта ты должен получить проксю с этим интерфейсом объекта, откуда она берётся...

интерфейс известен, где typelib тоже, какие проблемы?
Re[11]: Универсальный маршалинг
От: AndrewJD США  
Дата: 19.07.06 11:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Кто пакует, куда пакует. Когда ты делаешь CreateInstance outproc объекта ты должен получить проксю с этим интерфейсом объекта, откуда она берётся...


Скорее всего этим занимается код из ole32.dll.

В чем проблема создать прокси?
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[12]: Универсальный маршалинг
От: Аноним  
Дата: 19.07.06 12:23
Оценка:
Здравствуйте, AndrewJD, Вы писали:

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


А>>Кто пакует, куда пакует. Когда ты делаешь CreateInstance outproc объекта ты должен получить проксю с этим интерфейсом объекта, откуда она берётся...


AJD>Скорее всего этим занимается код из ole32.dll.


AJD>В чем проблема создать прокси?


если проблемы нет, означает что Вы можете сейчас сесть и в черновую накатать код, который осуществляетсяуниверсальный маршалинг Можете? Если да, поделитесь идеями как. Я например не могу, поэтому спрашиваю.
Re[13]: Универсальный маршалинг
От: AndrewJD США  
Дата: 19.07.06 13:12
Оценка:
Здравствуйте, Аноним, Вы писали:

AJD>>В чем проблема создать прокси?


А>если проблемы нет, означает что Вы можете сейчас сесть и в черновую накатать код, который осуществляетсяуниверсальный маршалинг Можете? Если да, поделитесь идеями как. Я например не могу, поэтому спрашиваю.


Прокси создать довольно просто. По описанию из библиотеки типов типов налету создадим струтктуру которая будет бинарно идентична требуемому интерфейсу и отдаем клиенту.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[14]: Универсальный маршалинг
От: Аноним  
Дата: 19.07.06 13:33
Оценка:
Здравствуйте, AndrewJD, Вы писали:

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


AJD>>>В чем проблема создать прокси?


А>>если проблемы нет, означает что Вы можете сейчас сесть и в черновую накатать код, который осуществляетсяуниверсальный маршалинг Можете? Если да, поделитесь идеями как. Я например не могу, поэтому спрашиваю.


AJD>Прокси создать довольно просто. По описанию из библиотеки типов типов налету создадим струтктуру которая будет бинарно идентична требуемому интерфейсу и отдаем клиенту.


налету гененить код — реализации методов прокси — неслабая задача.
Re[15]: Универсальный маршалинг
От: AndrewJD США  
Дата: 19.07.06 15:03
Оценка:
Здравствуйте, Аноним, Вы писали:

AJD>>Прокси создать довольно просто. По описанию из библиотеки типов типов налету создадим струтктуру которая будет бинарно идентична требуемому интерфейсу и отдаем клиенту.


А>налету гененить код — реализации методов прокси — неслабая задача.


Это почему же? К тому же код методов не генериться, а только заполняется поля структура размером в твой кастомный интерфейс. Причем для каждого метода устанавливается один и тот же обработчик.

Занимается этим rpcrt4.dll
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[16]: Универсальный маршалинг
От: Аноним  
Дата: 19.07.06 17:58
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>Это почему же? К тому же код методов не генериться, а только заполняется поля структура размером в твой кастомный интерфейс. Причем для каждого метода устанавливается один и тот же обработчик.


AJD>Занимается этим rpcrt4.dll


ну если обработчик один и он по typelib узнаёт скока параметров снять со стека для формирвания rpc запроса то в принципе вполне реально...
Re: Универсальный маршалинг
От: GSD  
Дата: 20.07.06 12:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Рзбираясь с архитектурой возник следующий вопросик... В случае стандартного маршалинга компилятор MIDL генерит проксю/заглушку которая является обьъектом с поддержкой маршалирумого интерфейса. Соответственно для создания прокси активируется объект с IID прокси и объект заглушки, которые живут в этой dll. Тут всё понятно. Непонятно каким образом осуществляется маршалинг через универсальный механизм автоматизации когда для любого объекта используется одна и таже универсальная прокся/заглушка. Если вызов осуществляется через диспатч, то понятно что объект с поддержкой iDispatch зашит в универсальную dll, а если выхов идёт через кастом интерфейс или в качесте параметров передаются кастомные интерфейсы то как всё работает?


а не пробовали интересоваться стандартной реализацией IDispath? Тоже все работает волшебным образом.
Re[2]: Универсальный маршалинг
От: Аноним  
Дата: 20.07.06 12:48
Оценка:
Здравствуйте, GSD, Вы писали:

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


А>>Рзбираясь с архитектурой возник следующий вопросик... В случае стандартного маршалинга компилятор MIDL генерит проксю/заглушку которая является обьъектом с поддержкой маршалирумого интерфейса. Соответственно для создания прокси активируется объект с IID прокси и объект заглушки, которые живут в этой dll. Тут всё понятно. Непонятно каким образом осуществляется маршалинг через универсальный механизм автоматизации когда для любого объекта используется одна и таже универсальная прокся/заглушка. Если вызов осуществляется через диспатч, то понятно что объект с поддержкой iDispatch зашит в универсальную dll, а если выхов идёт через кастом интерфейс или в качесте параметров передаются кастомные интерфейсы то как всё работает?


GSD>а не пробовали интересоваться стандартной реализацией IDispath? Тоже все работает волшебным образом.


Стандартной нет, есть та что зашита в ATL — там по сути всё делегируется к ITypeLib
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.