c# COM-сервер и c# COM-клиент - как в клиенте подписаться на события?
От: Аноним  
Дата: 18.03.14 09:33
Оценка:
Всем привет!

COM-сервер реализован по образцу CSExeCOMServer по технологии out-of-process.
Все методы и свойства работают, не понятно одно — как подписаться на события?

Объект COM-сервера:
[ClassInterface(ClassInterfaceType.None)]           // No ClassInterface
[ComSourceInterfaces(typeof(ISimpleObjectEvents))]
[Guid(Ids.ClassId), ComVisible(true)]
public class SimpleObject : ReferenceCountedObject, ISimpleObject
{
    ...

    #region Events
    [ComVisible(false)]
    public delegate void FloatPropertyChangingEventHandler(float newValue, ref bool cancel);
    public event FloatPropertyChangingEventHandler FloatPropertyChanging;
    #endregion
}

Интерфейс событий:
[Guid(Ids.EventsId), ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ISimpleObjectEvents
{
    #region Events
    [DispId(1)]
    void FloatPropertyChanging(float newValue, ref bool cancel);
    #endregion
}

В MSDN примеров не нашел (там все разноязыкое), прочий Гугл тоже не сильно помог.
подскажите, плиз...
Re: никто не в курсе?
От: Аноним  
Дата: 31.03.14 14:10
Оценка:
Здравствуйте, Аноним, Вы писали:

не проходит вот такой вот код:

var comObject = Activator.CreateInstance(typeFromCLSID);
var icpc = (IConnectionPointContainer)comObject;
var riid = new Guid(CLSIDs.EventsId);
icpc.FindConnectionPoint(ref riid, out connectionPoint);

на последней строчке вылетает с ошибкой 0х80040200

а
IEnumConnectionPoints ee;
icpc.EnumConnectionPoints(out ee);

возвращает 3 непонятных элемента, которые никак не посмотреть.

этот код тоже ничего не выдает...
private static Delegate d
...
ComEventsHelper.Combine(comObject, new Guid(CLSIDs.EventsId), 1, d);

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