32

如何在 python 中加载 ac# dll?

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

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

4

4 回答 4

32

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

C# DLL 示例MyDll.dll

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

有关更多详细信息,请参阅此帖子

于 2013-11-28T10:26:47.973 回答
8

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

通过使用

[ComVisible(true)]

好的 IronPython 是 Python 语言的 .net 实现该技术将在 .net 4.0 到来时使用 DLR,因此 IronPython 将具有更多的活力(是那个词)。(如果你是一个 Python 大师,用英语的话,当你使用 IronPython 时你会感觉更自在)

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

http://ironpython.net/

于 2010-01-16T15:40:57.577 回答
5

如果您不想使用 IronPython,适用于 .NET 的 Python可以很好地工作。

于 2013-07-18T22:02:13.930 回答
5

如果您不想使用 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 的内容)。

于 2017-03-21T15:06:34.450 回答