Всем привет!
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 примеров не нашел (там все разноязыкое), прочий Гугл тоже не сильно помог.
подскажите, плиз...
Здравствуйте, Аноним, Вы писали:
не проходит вот такой вот код:
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);
это вообще реально, то что я пытаюсь сделать?