我正在用monotouch编写一个应用程序,它也使用了C ++库,所以我一直在用p / inoke从C#调用C ++函数来做各种事情。然而,出现了一些场景,我希望C ++代码能够调用C#函数。
类似于:
void CPlusPlusFunction(Pointer* stuff)
{
//do stuff
CSharpFunction(*stuff);
}
这是可能的,如果可以的话,我怎么办呢?也许不是调用一个函数就可以将一个委托传递给C ++来调用,如果是这样,它将如何工作?我真正想做的就是在函数中立即将一些信息传递给C#。
感谢您的帮助!
答案 0 :(得分:3)
是的,你可以。但是,用于为设备编译的MonoTouch代码的AOT编译器必须知道这样的回调,因此它可以生成适当的代码。因此,您的回调必须使用 [MonoPInvokeCallback] 属性进行修饰。
http://developer.xamarin.com/guides/ios/advanced_topics/limitations/#Reverse_Callbacks
答案 1 :(得分:2)
您可以要求C#从共享库中导出函数,就像本机库可以做的那样。此外,C#可以将委托转换为相同签名的函数指针,您可以将其传递给C ++。