Маршаллинг от COM к COM+
От: Мельников Дмитрий Сергеевич Россия  
Дата: 01.02.02 07:16
Оценка:
Кто нибудь занимался маршаллингом интерфейсов? Как передать указатель локального COM серверному COM+ объекту?

Насколько я понимаю последовательность при маршаллинге следующая
CreateSteamOnHGlobal
CoMarshalInterface
GetHGlobalFromStream
полученный HGLOBAL как раз и передают. Для этого у того объекта, которому передают указатель на интерфейс, создают скажем метод Method1([in] HGLOBAL gl) и уже внутри этого метода производится unmarshalling.

Все это прекасно работает при передаче указателя на интерфейс от COM к COM. Но при передаче указателя от COM к COM+ возникает проблема. При компиляции в библиотеке типов параметр типа HGLOBAL меняется на wireHGLOBAL, что представляет собой указатель на union _userHGLOBAL, которая содержит в себе еще одну структуру с непроизносимым названием. Так вот как с этим бороться? Что это за структуры такие? В MSDN об этом почти не упоминается. Зачем все так усложнять? Может надо как-то по другому маршаллить?
Re: Маршаллинг от COM к COM+
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.02.02 20:21
Оценка:
Здравствуйте Мельников Дмитрий Сергеевич, Вы писали:

МДС>Кто нибудь занимался маршаллингом интерфейсов? Как передать указатель локального COM серверному COM+ объекту?


Так, а в чем проблема то? А? Бери указатель и передавай через параметр.

МДС>Насколько я понимаю последовательность при маршаллинге следующая

МДС>CreateSteamOnHGlobal
МДС>CoMarshalInterface
МДС>GetHGlobalFromStream

Ну, и зачем это все?

МДС>полученный HGLOBAL как раз и передают. Для этого у того объекта, которому передают указатель на интерфейс, создают скажем метод Method1([in] HGLOBAL gl) и уже внутри этого метода производится unmarshalling.


А это просто ерунда какая то... Что, по-твоему, приедит на другую машину в параметре gl?

Если хочешь маршалить вручную, то передавай массив байтов (лучше в SAFEARRAY запакованный).

МДС>Все это прекасно работает при передаче указателя на интерфейс от COM к COM. Но при передаче указателя от COM к COM+ возникает проблема. При компиляции в библиотеке типов параметр типа HGLOBAL меняется на wireHGLOBAL, что представляет собой указатель на union _userHGLOBAL, которая содержит в себе еще одну структуру с непроизносимым названием. Так вот как с этим бороться? Что это за структуры такие? В MSDN об этом почти не упоминается. Зачем все так усложнять? Может надо как-то по другому маршаллить?


Про wire-маршалинг в MSDN написано очень много. Вот только еще раз задам вопрос: А на фига козе баян?

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