2010-03-11 69 views
2

假设我需要使用Python和C++。我可以使用Python C API从C++调用Python函数,使用SWIG或同等方法可以反转。.NET中的语言互操作性(CLR)和单声道

.NET如何?我知道有最终生成.NET程序集的IronPython和C#。 .NET中是否有任何定义良好的语言互操作机制,以便可以使用任何语言的任何函数调用?

  • 如果是这样,那有什么机制?
  • 如果没有,那么可以通过哪种方式将函数从一种语言调用到另一种语言?
  • 在语言互操作性方面,.NET机制与MONO相同?

回答

5

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

对于不直接编译为.NET字节码的其他语言(例如Lua),则必须使用P/Invoke调用C API(或者使用其他人已经编写的类,如LuaInterface LUA)。

Mono是基本相同的,你就必须要小心你的P/Invoke声明(即你不能引用“lua51 .DLL”,因为Linux有.so文件,而不是.dll文件)

+0

Mono自动将共享库名称从lib.dll重新映射到当前操作系统使用的任何约定(Linux上的lib.so,OSX上的lib.dylib等),因此您只需要在兼容的共享库目标操作系统。 – lupus 2010-03-11 09:25:19

+0

哦,我不知道。我知道如果你只是使用“lib”而不是“lib.dll”或“lib.so”,那么它对两者都有效,但我想这是有道理的。 – 2010-03-11 11:06:45