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中的類中聲明事件?
在此先感謝。
你可能無法做到你想要的。本文展示瞭如何使用從類公開的事件來完成它。 http://blogs.msdn.com/b/murat/archive/2008/11/20/exposing-com-events-c.aspx – Cheeso 2010-11-07 16:32:59
是的,那就是我的想法。不管怎麼說,還是要謝謝你。 – 2010-11-08 07:39:49