Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, Константин Л., Вы писали:
КЛ>>Здравствуйте, Аноним, Вы писали:
А>>>Здравствуйте, 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>>