我正在開發一個愛好項目,我需要從非託管C++調用託管代理。由於受到外部約束,我還需要在託運代碼中將代理從託管代碼傳遞到非託管代碼。使用COM互操作從非託管代碼調用託管代理
理想情況下,我想要做的就是像在C#中一樣調用委託(通過調用委託使用與方法調用相同的語法),但是來自非託管代碼。我無法弄清楚如何做到這一點,即使這是可能的。
這是可能做到的,如果是這樣,怎麼辦?我必須使用事件並從非託管代碼中引發事件嗎?
這就是我想要做的。
在管理方面(這是託管C++)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void CallbackMethod();
[ComVisibleAttribute (true)]
[InterfaceTypeAttribute(ComInterfaceType::InterfaceIsIUnknown)]
[GuidAttribute("CD305837-98FC-4433-A195-BD50C6C16369")]
public interface class ICallback
{
void QueueCallback(CallbackMethod^ callBack);
};
而且,從實現ICallback接口的非託管類:
HRESULT CIoComplectionPort::QueueCallback(_CallbackMethod * callBack)
{
// How is the callBack method invoked here?
}