如何导出C#方法?

时间:2010-01-17 18:49:24

标签: c# python methods export python.net

我们如何导出C#方法?

我有一个DLL,我想在Python语言中使用它的方法和ctypes模块。 因为我需要使用ctypes模块,所以我需要导出C#方法,以便在Python中可见。

那么,我如何导出C#方法(就像在C ++中一样)?

4 个答案:

答案 0 :(得分:23)

与普遍看法相反,这可能 请参阅here

答案 1 :(得分:1)

使用普通的Python实现(“CPython”),你不能,至少不能直接。

您可以使用C++/CLI围绕我们的C#方法编写本机C包装器,并从Python调用这些包装器。

或者,您可以尝试IronPython。这使您可以运行Python代码并以任何.Net语言调用代码,包括C#。

答案 2 :(得分:1)

(这可能不再具有相关性,因为SLaks发现了这个巧妙的链接,但我会留下一个编辑版本供参考......)

将.NET / C#对象暴露给非托管代码(如Python)的“常规”方法是为C#DLL(.NET程序集)创建一个COM可调用包装器,并使用Python的COM / OLE支持调用它。要创建COM可调用包装器,请使用tlbexp和/或regasm命令行实用程序。

但是,显然,这并没有提供SLaks链接所做的C / DLL风格的API。

答案 3 :(得分:1)

那是不可能的。如果需要DLL导出,则需要使用C ++ / CLI语言。例如:

public ref class Class1 {
public:
  static int add(int a, int b) {
      return a + b;
  }
};

extern "C" __declspec(dllexport) 
int add(int a, int b) {
  return Class1::add(a, b);
}

该类也可以用C#编写。 C ++ / CLI编译器为导出发出特殊的thunk,以确保加载CLR并执行切换到托管模式。这不是很快。

在C#中编写[ComVisible(true)]代码是另一种可能性。