如何在python中加载c#dll?
我是否必须在c#文件中添加一些额外的代码? (比如在c ++文件中导出)
我不想使用IronPython。我想将模块导入Python!
答案 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)
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
之下答案 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脚本开始)。