如何解决如何在C ++ / CLI中将委托^传递给本机类
我有一个母语班
public NativeClass:
{
public:
typedef void(*Func)(cv::UMat image);
void setFunc(Func func);
}
,并希望将一个函数作为参数传递给托管类。
ref ManagedClass:
{
public:
ManagedClass()
{
NativeClass* nativeClass = new NativeClass();
nativeClass.setFunc(doSomething);
}
private:
doSomething(cv::UMat image)
{
//do something
}
}
但是它似乎不起作用。我怎样才能使它正常工作?
解决方法
在将委托作为函数指针传递之前,需要首先创建一个委托。
在C#中,您只需要引用没有括号的方法名称。在C ++ / CLI中,您需要显式调用委托构造函数,并且需要传递对象的显式参数以调用方法,并以C ++样式调用方法。
MyDelegate^ del = gcnew MyDelegate(this,&ManagedClass::doSomething);
// Explicit ctor ^^^^^^^^^^^^^^^^
// Pass the object to be called on ^^^^
// Pass the method in the C++ style ^^^^^^^^^^^^^^^^^^^^^^^^^^
一旦有了,就可以将委托传递给采用原始函数指针的方法。它知道如何将托管委托对象转换为函数指针。 Microsoft's documentation中有一个很好的例子。您必须一定要始终保持托管委托对象 。一旦托管委托被垃圾回收,原始函数指针就会停止工作。
一旦有了,就需要查看参数类型cv::UMat
。我不知道它是什么类型或在哪里得到的,但是您可能需要在托管端,非托管端或两者上调整参数类型。 (这就是为什么我在上面的示例中未声明委托类型的原因;我不确定是否可以正常工作,所以我将其保留为通用类型。如果一切正常,那么您可以使用Action<cv::UMat>
作为委托类型。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。