如何为C#添加Python绑定?
当你想从Python调用C语言时,你需要写一个这样的模块:
http://docs.python.org/extending/extending.html
现在,我有一个问题:
我想写一个可以在Python中使用的C#模块。
我该如何让C#和原生Python进行交互呢?
(注意:我对Python.NET或IronPython不感兴趣)。
1 个回答
2
我知道你可能不太喜欢这个答案,但老实说:用C++来写,使用boost::python或者直接用Cython。
虽然可以用C#来写扩展,但你需要把Python使用的数据结构转换过来,还得引入很多Python的C API,来回处理管理代码和非管理代码之间的数据,处理Python和C#的垃圾回收器之间的对象生命周期等等,这样做可能根本不值得。
而且,这样会让你依赖于.NET框架,失去平台独立性(即使使用Mono也可能如此),而且总体上收益不大。
如果你想在CPython中使用C#的程序集,其实最好的办法是用pywin32的win32com模块在Python这边,和.NET那边的COM Interop。这样可以让你把C#对象作为COM类暴露出来,只需在源代码中添加几个属性,就能轻松地把它们作为对象导入到Python中,包括事件等功能。我用这种方式成功地整合了这两个平台。