Я хочу передать в качестве обратного вызова функцию-член C ++ в проект C#. У меня есть другой проект в C ++ / CLI, и я хочу сделать это через него.
Итак, в неуправляемом C ++ моего проекта C ++ / CLI у меня есть объект функции: std::function<void(int)>callback;
This Функция происходит из моего C ++ проекта, и она работает нормально, я сохраню ее в качестве примера, чтобы избежать предыдущего шага. Теперь я хотел бы передать эту функцию обратного вызова в мой проект C#. Для этого я создаю метод в неуправляемом C ++, передаю его в управляемый C ++ и с этого момента, наконец, передаю его C#. Я хотел бы что-то вроде этого:
// Unmanaged class
public class Wrapper
{
public:
std::function<void(int)>callback;
void ReturnToCallback(int data)
{
callback(data);
}
void PassCallback()
{
NETWrapper netWrapper;
netWrapper.TestCallback(ReturnToCallback);
}
};
//Managed class
public ref class NETWrapper
{
public:
void TestCallback(Action<int>^ callback)
{
StartGenerator^ startGen = gcnew StartGenerator(callback);
}
};
// C#
public class StartGenerator
{
private Communication comm;
public StartGenerator(Action<int> callback)
{
comm = Communication.Instance;
comm.callback = callback;
}
}
Это решение, конечно, возвращает мне ошибку при компиляции:
Ошибка 3 ошибка C3867: 'IfaceXXX :: Wrapper :: ReturnToCallback ': вызов функции без списка аргументов; используйте '& IfaceXXX :: Wrapper :: ReturnToCallback', чтобы создать указатель на член d: \ XXX.h
Я пробовал другие способы, такие как Получить делегат для указателя функции, чтобы я мог работать над Управлял C ++ и передаю его C#, но я не могу правильно его реализовать. Как вы думаете, это лучший способ попробовать это?