如何导出C#方法?

问题描述 投票:0回答:4

我们如何导出 C# 方法?

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

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

c# python methods export python.net
4个回答
21
投票

与普遍看法相反,这是可能的。
请参阅此处


1
投票

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

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

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


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)] 代码是另一种可能性。


1
投票

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

将 .NET/C# 对象公开给非托管代码(如 Python)的“正常”方法是为 C# DLL(.NET 程序集)创建 COM 可调用包装器,并使用 Python 的 COM/OLE 支持来调用它。要创建 COM 可调用包装器,请使用

tlbexp
和/或
regasm
命令行实用程序。

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

© www.soinside.com 2019 - 2024. All rights reserved.