如何在python中加载C#dll?

时间:2010-01-16 15:38:23

标签: c# python .net cpython python.net

如何在python中加载c#dll?

我是否必须在c#文件中添加一些额外的代码? (比如在c ++文件中导出)

我不想使用IronPython。我想将模块导入Python!

4 个答案:

答案 0 :(得分:21)

Python for.NET和Python实现IronPython现在的工作方式相同。

C#DLL MyDll.dll的示例:

import clr
clr.AddReference('MyDll')
from MyNamespace import MyClass
my_instance = MyClass()

有关详细信息,请参阅this post

答案 1 :(得分:5)

如果您不想使用IronPython,

Python for .NET效果很好。

答案 2 :(得分:4)

这是回答你的问题的第二部分 尝试使DLL COM可见。

使用

[ComVisible(true)]

Ok IronPython是Python语言的.net实现  该技术将在它到达时使用.net 4.0的DLR,因此IronPython将具有更多的动态性(就是这个词)。 (在英语中,如果你是Python大师,当你使用IronPython时,你会感觉更有家的感觉)

所以你可能会选择IronPython,如果你这样做,你可以跳过COM可见部分。由于两者(C#,Iron Python)都在.Net

之下

http://ironpython.net/

Visit here for a sample C# DLL which is visible to COM

答案 3 :(得分:2)

如果您不想使用Python .NET或IronPython等解决方案,可以实现C ++ / CLI包装并使用Pythons ctypes加载它。例如:

C ++ / CLI库CallCSharp:

extern "C" {
    __declspec(dllexport) void foo()
    {
        // here you could use managed and unmanaged code
        Console.WriteLine("Hello, C# world...");
    }

Python脚本:

from ctypes import cdll
lib = cdll.LoadLibrary("./CallCSharp.dll")
lib.foo()

我强烈建议您阅读此博客:http://pragmateek.com/if-your-plumbing-doesnt-work-youre-just-not-using-enough-pipes/#more-1745

它还处理当C ++ / CLI包装器调用另一个程序集中的代码时出现的问题(您将得到类似WindowsError的内容:[错误-532462766] Windows错误0xE0434352然后从您的Python脚本开始)。