【问题标题】:Is there a way to call a C# delegate from COM Interop?有没有办法从 COM Interop 调用 C# 委托?
【发布时间】: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 中的类中声明事件?

提前致谢。

【问题讨论】:

标签: c# events interop delegates com-interop


【解决方案1】:

据我所知,除了使用事件之外没有其他方法可以做到这一点,并且事件只能从类中抛出,而不能从接口中抛出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多