我们如何导出C#方法?
我有一个DLL,我想在Python语言中使用它的方法和ctypes模块。 因为我需要使用ctypes模块,所以我需要导出C#方法,以便在Python中可见。
那么,我如何导出C#方法(就像在C ++中一样)?
答案 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)]代码是另一种可能性。