代码之家  ›  专栏  ›  技术社区  ›  Ignacio Soler Garcia

有没有办法从COM Interop调用C委托?

  •  2
  • Ignacio Soler Garcia  · 技术社区  · 14 年前

    我正在把一个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中的类中声明事件?

    事先谢谢。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Ignacio Soler Garcia    14 年前

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