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

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


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


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


А>>>и что?

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

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



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


Универсальный маршалинг базируется на oleaut32.dll
Re[12]: Универсальный маршалинг
От: Аноним  
Дата: 19.07.06 12:23
Оценка:
Здравствуйте, AndrewJD, Вы писали:

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


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


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


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


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