c#(mono,.net)方法的调用,本地c的delegate是否可以在nativec代码中调用(以及如何)调用用托管代码(可能在类或库中)编写的c#方法?谢谢编辑:我所说的“c#”主要是指单声道甚至portable.net,操作系统是Linux您的C代码可以定义注册回调的函数。C#代码可以P/Invoke这些函数,将托管委托作为参数传递。编组代码将透明地将它们转换为C函数指针。或者,从C端接近它,您可以使用Mono嵌入API来加载程序集,查找MonoMethods并调用它们。使用嵌入API要复杂得多。如果您的入口点在C中,您将不得不使用嵌入API,但简单地编写一个托管方法来执行回调注册和任何其他托管设置可能更容易,然后您只需从C加载并调用该单一方法代码。MSDN站点上有一个托管/非托管代码互操作性概述,可能会对您有所帮助。以下是摘录:直接访问托管API如果非托管客户端是用C++编写的,则可以使用VisualStudio.NETC++编译器将其编译为“混合模式图像”。完成此操作后,非托管客户端可以直接访问任何托管API。但是,某些编码规则适用于从非托管代码访问托管对象;有关详细信息,请参阅C++文档。直接访问是首选,因为它不需要托管API开发人员的任何特殊考虑。他们可以根据托管API设计指南(DG)设计托管API,并确信非托管调用者仍将能够访问API。将托管API公开为COMAPI每个公共托管类都可以通过COM互操作公开给非托管客户端。这个过程很容易实现,因为COM互操作层负责所有的COM管道。因此,例如,每个托管类似乎都实现了IUnknown、IDispatch、ISupportErrorInfo和其他一些标准COM接口。虽然将托管API公开为COMAPI很容易,但托管和COM对象模型非常不同。因此,向COM公开托管API应该始终是一个明确的设计决策。托管世界中的某些功能在COM世界中没有等效项,并且不能从COM客户端使用。因此,托管API设计指南(DG)和COM兼容性之间常常存在矛盾。如果COM客户端很重要,请根据托管API设计指南编写托管API,然后围绕将向COM公开的托管API编写一个简单的COM友好托管包装器。将托管API公开为平面API有时非托管客户端无法使用COM。例如,它们可能被编写为使用无法更改或重新编译的平面API。C++是唯一允许您将托管API公开为平面API的高级语言。这样做并不像将托管API公开为COMAPI那么简单。这是一项非常先进的技术,需要C++互操作的高级知识以及托管和非托管世界之间的差异。仅在绝对必要时将托管API公开为平面API。如果别无选择,请务必查看C++文档并充分了解任何限制。这是一个解决方案。要从C调用C#函数,请使用[DllExport]属性(相对于P/InvokeDllImport)。https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports以上是C#学习教程:如何调用c#(mono,.net)方法,所有delegate从本地分享的内容c、如果你有兴趣很有用,需要多了解C#学习教程。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
