【发布时间】:2020-04-10 18:41:34
【问题描述】:
我想将 C++ 成员函数作为回调传递给 C# 项目。我在 C++/CLI 中有其他项目,我想通过它来完成。
因此,在我的 C++/CLI 项目的非托管 C++ 中,我有一个函数对象:std::function<void(int)>callback;
这个函数来自我的 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#,但我无法正确实现它。您认为最好的尝试方法是什么?
【问题讨论】:
标签: c# c++ callback delegates c++-cli