我们如何导出 C# 方法?
我有一个 dll,我想通过 ctypes 模块在 Python 语言中使用它的方法。 因为我需要使用 ctypes 模块,所以我需要导出 C# 方法,以便它们在 Python 中可见。
那么,如何导出 C# 方法(就像在 C++ 中一样)?
与普遍看法相反,这是可能的。
请参阅此处。
使用普通的 Python 实现(“CPython”),你不能,至少不能直接这样做。
您可以使用 C++/CLI 围绕我们的 C# 方法编写本机 C 包装器,并从 Python 调用这些包装器。
或者,您可以尝试IronPython。这使您可以运行 Python 代码并调用任何 .Net 语言(包括 C#)的代码。
那是不可能的。如果需要 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)] 代码是另一种可能性。
(这可能不再相关,因为 SLAks 发现了这个巧妙的链接,但我会留下编辑后的版本以供参考......)
将 .NET/C# 对象公开给非托管代码(如 Python)的“正常”方法是为 C# DLL(.NET 程序集)创建 COM 可调用包装器,并使用 Python 的 COM/OLE 支持来调用它。要创建 COM 可调用包装器,请使用
tlbexp
和/或 regasm
命令行实用程序。
但是,显然,这并没有提供 SLaks 链接所提供的 C/DLL 风格的 API。