如何导出C#方法?
我们怎么能把C#的方法导出呢?
我有一个dll文件,我想在Python语言中使用它的方法,得用到ctypes这个模块。因为我需要用ctypes模块,所以我得把C#的方法导出来,这样它们才能在Python中被看到。
那么,我该怎么把C#的方法导出呢(就像在C++中那样)?
3 个回答
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编译器会生成一个特殊的代码片段,用于导出,这样可以确保CLR(公共语言运行时)被加载,并且执行模式切换到托管模式。不过,这个过程并不是特别快。
在C#中编写[ComVisible(true)]代码也是一种选择。
1
把.NET/C#对象暴露给不受管理的代码(比如Python)的“正常”方式是为C#的DLL(.NET程序集)创建一个可以被COM调用的包装器,然后通过Python的COM/OLE支持来调用它。要创建这个COM可调用的包装器,可以使用tlbexp
和/或regasm
这两个命令行工具。
不过,很明显,这种方法并不能提供一个像C/DLL那样的API。