2010-11-03 92 views
2

我將一個C#庫移植到COM中,並且我很難嘗試翻譯一些代表。 C#庫使用一些回調(使用委託)。通常我會將它翻譯成COM客戶端要使用的事件,但該庫只生成公共接口,因此我無法使用ComSourceInterfaces。有沒有辦法從COM Interop調用C#委託?

由於我想什麼,能夠做一個例子:

[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

你可能無法做到你想要的。本文展示瞭如何使用從類公開的事件來完成它。 http://blogs.msdn.com/b/murat/archive/2008/11/20/exposing-com-events-c.aspx – Cheeso 2010-11-07 16:32:59

+0

是的,那就是我的想法。不管怎麼說,還是要謝謝你。 – 2010-11-08 07:39:49

回答

0

據我所見除了事件和事件之外沒有辦法做到這一點,只能從一個類從一個接口中拋出。

相關問題