我正在开发一个爱好项目,我需要从非托管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?
}