3

我正在设计一个应用程序。核心应该用 C# 编写,但我也想使用一些已经完成的 CPython 模块(非托管)。

所以我对互操作性(从 C# 调用 CPython 方法和从 CPython 调用 C#)感兴趣。如果有问题,因为 C# 在 .NET 运行时(托管)中运行,而 CPython 直接非托管。

我已经与谷歌调查了这个问题并提出了以下解决方案:

  • 通过 DLR +“CPython 扩展”+也许是“IronClad”使用 IronPython 并从 IronPython 调用 CPython 模块,反之亦然 -> 这些模块是托管还是非托管执行?如果我想使用 CPython 中的 C# 类和方法,有什么问题吗?
  • 使用“Python for .NET”-> 与上述相同的问题。

你怎么看,哪种方式会更好?还是您有其他解决方案?

最后一个但也许是最重要的问题,我是否正确理解了上述几点,还是我搞砸了?

提前谢谢了 !!

4

2 回答 2

2

我认为你误解了 Python。它是一种解释型1语言。您只需提供文本源文件,解释器就会执行它们。

Python语言与CPython、IronPython、Jython、PyPy 等实现之间存在差异。他们每个人都试图尽可能准确地实现 Python 语言,同时还添加了特定于实现的功能。这就像 C# 编译器是用 C++ 编写的一样。

例如,任何(纯)Python 文件都可以由 IronPython 解释器执行。但是,如果您知道您将使用 IronPython,您可以使用特殊的 IronPython 功能,让您进入 .NET 库。

现在,大多数 Python 不使用任何特定于实现的功能,因此使用什么来运行它并不重要。不过,有些 Python 确实如此。

1好吧,它被编译成 .pyc 文件……但无论如何,“编译”并不是一个定义明确的术语。


为什么这对你很重要?好吧,您有一堆要与 .NET 框架一起使用的 Python 源代码。如果该代码不使用任何 CPython 特定的功能——例如使用 C 扩展模块——那么您可以在 IronPython 中运行它。

于 2012-04-18T13:18:46.900 回答
1

通过 COM 公开您的 Python 代码并从 C# 调用它。多次使用此途径(两种方式)。

于 2013-01-14T12:48:48.903 回答