Я портирую библиотеку C # на COM и с трудом пытаюсь перевести некоторых делегатов.Библиотека C # работает с некоторыми обратными вызовами (с использованием делегатов).Обычно я хотел бы перевести это на события, которые будут использоваться COM-клиентами, но библиотека создает только открытые интерфейсы, поэтому я не могу использовать ComSourceInterfaces.
В качестве примера того, что я хотел бы иметь возможность сделать:
[ComVisible(false)]
public delegate void ReceivedCOMMessageHandler (MessageCOM^ message);
[ComSourceInterfaces("ReceivedMessageEventInterface")]
public interface class IChannelCOM
{
bool PushMessage (MessageCOM^ message);
bool RegisterEventHandler (ReceivedCOMMessageHandler^ handler, FilterCOM^ filter);
bool UnRegisterEventHandler (ReceivedCOMMessageHandler^ handler);
property String^ Name;
event ReceivedCOMMessageHandler^ ReceivedMessage;
};
[InterfaceType(ComInterfaceType::InterfaceIsIDispatch)]
[Guid("D4D2A638-303E-41d4-8925-07A2A60B17F3")]
public interface class ReceivedMessageEventInterface
{
[DispId(1)] void ReceivedMessage(MessageCOM^ message);
};
Я не могу этого сделать, потому что событие объявляется в интерфейсе, а ComSourceInterface может быть объявлен только в классе.
Есть ли какие-либо советы о том, что можно сделать, чтобы решить эту проблему?
РЕДАКТИРОВАТЬ: Другой способ сказать то же самое.Есть ли способ объявить события в интерфейсах, а не в классах в COM?
Заранее спасибо.