【发布时间】:2010-11-03 08:24:36
【问题描述】:
我正在将一个 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 中的类中声明事件?
提前致谢。
【问题讨论】:
-
您可能无法完全按照您的意愿行事。本文展示了如何使用从类中公开的事件来做到这一点。 blogs.msdn.com/b/murat/archive/2008/11/20/…
-
是的,我就是这么想的。还是谢谢。
标签: c# events interop delegates com-interop