.net - .NET (CLR) 和 Mono 中的语言互操作性

标签 .net mono clr

假设我需要使用 Python 和 C++。我可以使用 Python C API 从 C++ 调用 Python 函数,并且可以使用 SWIG 或等效函数进行反向调用。

.NET 怎么样?我知道有 IronPython 和 C# 最终生成 .NET 程序集。 .NET 中是否有任何定义明确的语言互操作性机制,以便可以使用来自任何语言的任何函数调用?

  • 如果是,其机制是什么?
  • 如果不是,如何将函数从一种语言调用到另一种语言?
  • .NET 机制在语言互操作性方面是否与 MONO 相同?

最佳答案

如果您谈论的是 IronPython 和 C#,那么这两种语言可以通过 CLI(即 Common Language Infrastructure)无缝互操作。这意味着,C# 代码中的方法可直接从 IronPython 访问,反之亦然。

对于其他不直接编译为 .NET 字节码的语言(例如 Lua),您将不得不使用 P/Invoke 来调用 C API(或使用其他人已经编写的 API,例如 LuaInterface用于 Lua)。

Mono 基本上是一样的,你只需要小心你的 P/Invoke 声明(即你不能引用“lua51 .dll”,因为 Linux 有 .so 文件,而不是 .dll文件)

关于.net - .NET (CLR) 和 Mono 中的语言互操作性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2422090/

相关文章:

.net - app.config 中的连接字符串。安全性如何?

c# - 在服务器桌面 session 上捕获屏幕

c# - 使用 Mono 的泛型类型参数没有装箱或类型参数转换

c# - 针对 .NET 和 Mono 的跨平台线图库的建议

c++ - C++ CLR 值类型上需要 pin_ptr,为什么?

c# - 如果多个成员具有相同的属性,如何抛出编译器错误

c# - 从 HttpClient 实例访问 HttpClientHandler?

c# - Debug.Assert 不会进入 MonoDevelop/MonoTouch 中的编辑器

c# - 如何在 Visual C++ 中将托管变量用作全局变量?

c# - 什么时候在 CLR 中为泛型的不同实例共享代码?