如何在 python 中加载 ac# dll?
我是否必须在 c# 文件中添加一些额外的代码?(如在 c++ 文件中导出)
我不想使用 IronPython。我想将一个模块导入 Python!
如何在 python 中加载 ac# 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)]
好的 IronPython 是 Python 语言的 .net 实现该技术将在 .net 4.0 到来时使用 DLR,因此 IronPython 将具有更多的活力(是那个词)。(如果你是一个 Python 大师,用英语的话,当你使用 IronPython 时你会感觉更自在)
所以你可能会选择 IronPython,如果你这样做,你可以跳过 COM 可见部分。由于两者(C#,Iron Python)都在.Net下
如果您不想使用 IronPython,适用于 .NET 的 Python可以很好地工作。
如果您不想使用 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 包装器调用另一个程序集中的代码时出现的问题(然后,您会从 Python 脚本中得到类似于 WindowsError: [Error -532462766] Windows Error 0xE0434352 的内容)。