如何在Python中加载C# dll?

问题描述 投票:0回答:6

如何在 python 中加载 c# dll?

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

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

c# python .net cpython python.net
6个回答
37
投票

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

C# DLL 示例

MyDll.dll
:

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

请参阅这篇文章了解更多详情。


9
投票

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

通过使用

[ComVisible(true)]

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

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

http://ironpython.net/


6
投票

如果您不想使用 Python .NETIronPython 等解决方案,可以实现 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()

更多使用 ctypes 的示例可以在这里找到

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

它还可以处理当 C++/CLI 包装器调用另一个程序集中的代码时出现的问题(然后你会从 Python 脚本中得到类似 WindowsError: [Error -532462766] Windows Error 0xE0434352 的信息)。


5
投票
如果您不想使用 IronPython,

Python for .NET 效果很好。


0
投票

IronPython 仅完全支持 Python 2.7,根据其 gihub 存储库,Python 3.x 版本并不完全完整。

因此,这是选择 Python for .NET (pythonnet) 的一个重要原因,或者像 Matt 所说的那样,创建一个 C++ 包装器 dll 并在 python 中使用 ctypes。


-1
投票

如果您想要更多解释,请观看 youtube 视频 (https://www.youtube.com/watch?v=lnsTJRY1jPU),他在其中做了很好的解释。

© www.soinside.com 2019 - 2024. All rights reserved.