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