如何在C ++ / CLI环境中将非静态回调注册为函数指针?

时间:2010-09-07 09:54:09

标签: c# .net events c++-cli

我们有一个C ++ / CLI类,我们称之为类A,我们希望将非静态回调(“MyNonStaticCallback”)注册到非托管C ++类(B类)。

e.g。

void MyNonStaticCallback(void* ...)
{
    // Raise a C# event from this code
}

// Register callback into class B
myClassBInstance->RegisterCallback(..., &MyNonStaticCallback, ...); 

我们想要一个非静态回调的原因是因为我们想从这个回调函数中引发一个C#事件。

我知道无法将实例的数据成员作为函数指针传递。什么是最好的方式来这里?

谢谢和最诚挚的问候,

罗曼

1 个答案:

答案 0 :(得分:1)

使用Marshal.GetFunctionPointerForDelegate方法获取传递给非托管代码的函数指针。用MyNonStaticCallback中的IntPtr替换void *,它与非托管的void *匹配。通过通用C ++ / CLI规则创建委托实例。