从C ++调用C#函数?

时间:2011-08-14 16:53:43

标签: c# .net c++ mono xamarin.ios

我正在用monotouch编写一个应用程序,它也使用了C ++库,所以我一直在用p / inoke从C#调用C ++函数来做各种事情。然而,出现了一些场景,我希望C ++代码能够调用C#函数。

类似于:

void CPlusPlusFunction(Pointer* stuff)
{
    //do stuff

    CSharpFunction(*stuff);
}

这是可能的,如果可以的话,我怎么办呢?也许不是调用一个函数就可以将一个委托传递给C ++来调用,如果是这样,它将如何工作?我真正想做的就是在函数中立即将一些信息传递给C#。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

是的,你可以。但是,用于为设备编译的MonoTouch代码的AOT编译器必须知道这样的回调,因此它可以生成适当的代码。因此,您的回调必须使用 [MonoPInvokeCallback] 属性进行修饰。

http://developer.xamarin.com/guides/ios/advanced_topics/limitations/#Reverse_Callbacks

答案 1 :(得分:2)

您可以要求C#从共享库中导出函数,就像本机库可以做的那样。此外,C#可以将委托转换为相同签名的函数指针,您可以将其传递给C ++。