У меня есть библиотека .NET, которая должна быть доступна для взаимодействия COM, включая некоторые асинхронные операции. Как таковой, мне нужно реализовать события. Реализация событий из C # кажется простой:
[ComVisible(true)]
[Guid("...")]
[ClassInterface(ClassInterfaceType.None)]
[ComSourceInterfaces(typeof(IClass1Event))]
public class Class1: IClass1
{
public delegate Int32 IntIntFunc(Int32 arg);
public event IntIntFunc Event;
public Int32 RaiseEvent(Int32 param)
{...}
}
[ComVisible(true)]
[Guid("...")]
public interface IClass1
{
Int32 RaiseEvent(Int32 param);
}
[ComVisible(true)]
[Guid("...")]
public interface IClass1Event
{
Int32 Event(Int32 param);
}
Но у меня проблемы с реализацией приемника событий C ++.
Различные примеры, от которых я сталкивался, варьируются от простого IConnectionPoint::Advise
до простого «использования VB», но я сталкиваюсь с любыми проблемами, пытающимися их реализовать (и нет, я не могу использовать VB) - либо ATL отказывается внедрять AddRef
для меня, или я не могу понять VTables своим умом (к сожалению, я очень разбираюсь в фреймворках C).
У меня нет информации о том, какой фреймворк предпочтительнее, только этот клиент - C ++.
Итак, мой вопрос: каков был бы самый простой способ представить события .NET в C ++, и, следовательно, какой самый простой способ реализовать приемник тестов?
P.S .: Мне действительно нужен интерфейс событий, чтобы быть IDispatch?