Я пытаюсь добавить некоторый управляемый код в существующее приложение на языке c ++.Я хотел бы, чтобы работал функциональный обратный вызов ... в частности, я хотел бы передать указатель метода из НЕИЗМЕНЕННОГО кода в УПРАВЛЯЕМЫЙ код и заставить управляемый код вызывать обратный вызов.
Я смотрю начто-то вроде этого:
typedef int (__stdcall *ANSWERCB)(int); //Delegate declaration
class UnmanagedObject
{
public:
UnmanagedObject() {}
int MethodD(int n) { return n; }
};
с соответствующим управляемым классом:
public delegate int CallbackDelegate(int i);
public class ManagedClass
{
public ManagedClass() {}
public void MethodD( CallbackDelegate cd ) { cd.Invoke( 5 ); }
}
Проблема в том, что я не могу понять, как на самом деле вызвать это из управляемогокод:
UnmanagedObject* obj = new UnmanagedObject();
ManagedLibrary::ManagedClass^ mc = gcnew ManagedLibrary::ManagedClass();
mc->MethodD( /* what do I pass here? */ );
Я пробовал:
ManagedLibrary::CallbackDelegate^ cd = gcnew CallbackDelegate(obj, &UnmanagedObject::MethodD);
, но он генерирует ошибку компилятора "цель делегата должна быть указателем на функцию-член".
Любой гуру взаимодействия может помочь?
Спасибо!