【问题标题】:Calling C# function from C++?从 C++ 调用 C# 函数?
【发布时间】:2011-08-14 16:53:42
【问题描述】:

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

比如:

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

    CSharpFunction(*stuff);
}

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

感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 您能给我们举个简单的例子吗?
      • 这是一个示例,C# 如何使用委托(回调 EnumWindowsProc)并将其作为 IntPtr 传递给 C 函数 EnumWindows()。 code.msdn.microsoft.com/windowsapps/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      • 2021-11-09
      相关资源
      最近更新 更多