Я работаю над хобби-проектом, где мне нужно вызвать управляемого делегата из неуправляемого C ++.Из-за внешних ограничений мне также необходимо передать делегат из управляемого кода в неуправляемый код во время выполнения.
В идеале, я бы хотел просто вызвать делегат, как я бы сделал это в 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?
}