如何在 python 中加载 c# dll?
我必须在 c# 文件中添加一些额外的代码吗? (如在 C++ 文件中导出)
我不想使用 IronPython。我想将模块导入Python!
包 Python for .NET 和 Python 实现 IronPython 现在以相同的方式工作。
C# DLL 示例
MyDll.dll
:
import clr
clr.AddReference('MyDll')
from MyNamespace import MyClass
my_instance = MyClass()
请参阅这篇文章了解更多详情。
这是回答你问题的第二部分 尝试使 DLL COM 可见。
通过使用
[ComVisible(true)]
Ok IronPython 是 Python 语言的 .net 实现 该技术将在 .net 4.0 到来时使用 DLR,因此 IronPython 将具有更多的动态性(就是这个词)。 (如果你是Python大师,使用IronPython你会感觉更自在)
所以你很可能选择IronPython,如果这样做你可以跳过COM可见部分。由于两者(C#、Iron Python)都在 .Net 下
如果您不想使用 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()
更多使用 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 的信息)。
Python for .NET 效果很好。
IronPython 仅完全支持 Python 2.7,根据其 gihub 存储库,Python 3.x 版本并不完全完整。
因此,这是选择 Python for .NET (pythonnet) 的一个重要原因,或者像 Matt 所说的那样,创建一个 C++ 包装器 dll 并在 python 中使用 ctypes。
如果您想要更多解释,请观看 youtube 视频 (https://www.youtube.com/watch?v=lnsTJRY1jPU),他在其中做了很好的解释。