Кто нибудь занимался маршаллингом интерфейсов? Как передать указатель локального COM серверному COM+ объекту?
Насколько я понимаю последовательность при маршаллинге следующая
CreateSteamOnHGlobal
CoMarshalInterface
GetHGlobalFromStream
полученный HGLOBAL как раз и передают. Для этого у того объекта, которому передают указатель на интерфейс, создают скажем метод Method1([in] HGLOBAL gl) и уже внутри этого метода производится unmarshalling.
Все это прекасно работает при передаче указателя на интерфейс от COM к COM. Но при передаче указателя от COM к COM+ возникает проблема. При компиляции в библиотеке типов параметр типа HGLOBAL меняется на wireHGLOBAL, что представляет собой указатель на union _userHGLOBAL, которая содержит в себе еще одну структуру с непроизносимым названием. Так вот как с этим бороться? Что это за структуры такие? В MSDN об этом почти не упоминается. Зачем все так усложнять? Может надо как-то по другому маршаллить?
Здравствуйте Мельников Дмитрий Сергеевич, Вы писали:
МДС>Кто нибудь занимался маршаллингом интерфейсов? Как передать указатель локального COM серверному COM+ объекту?
Так, а в чем проблема то? А? Бери указатель и передавай через параметр.
МДС>Насколько я понимаю последовательность при маршаллинге следующая МДС>CreateSteamOnHGlobal МДС>CoMarshalInterface МДС>GetHGlobalFromStream
Ну, и зачем это все?
МДС>полученный HGLOBAL как раз и передают. Для этого у того объекта, которому передают указатель на интерфейс, создают скажем метод Method1([in] HGLOBAL gl) и уже внутри этого метода производится unmarshalling.
А это просто ерунда какая то... Что, по-твоему, приедит на другую машину в параметре gl?
Если хочешь маршалить вручную, то передавай массив байтов (лучше в SAFEARRAY запакованный).
МДС>Все это прекасно работает при передаче указателя на интерфейс от COM к COM. Но при передаче указателя от COM к COM+ возникает проблема. При компиляции в библиотеке типов параметр типа HGLOBAL меняется на wireHGLOBAL, что представляет собой указатель на union _userHGLOBAL, которая содержит в себе еще одну структуру с непроизносимым названием. Так вот как с этим бороться? Что это за структуры такие? В MSDN об этом почти не упоминается. Зачем все так усложнять? Может надо как-то по другому маршаллить?
Про wire-маршалинг в MSDN написано очень много. Вот только еще раз задам вопрос: А на фига козе баян?
У тебя какая реальная задача, то?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.