簡體   English   中英

有沒有辦法從COM Interop調用C#委托?

[英]Is there a way to call a C# delegate from COM Interop?

我正在將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中的類中聲明事件?

提前致謝。

據我所知,除了使用Event之外,沒有其他方法可以做,並且只能從Class而不是從Interface拋出Event。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM