如何在python中加载C#dll?

aF.*_*aF. 22 .net c# python cpython python.net

如何在python中加载ac#dll?

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

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

Vin*_*ent 22

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

C#DLL的示例MyDll.dll:

import clr
clr.AddReference('MyDll')
from MyNamespace import MyClass
my_instance = MyClass()
Run Code Online (Sandbox Code Playgroud)

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

  • 首先通过`pip3 install pythonnet`安装它 (2认同)

anh*_*ppe 6

如果您不想使用Python .NETIronPython等解决方案,可以实现 C++/CLI 包装器并使用Python ctypes来加载它。例如:

C++/CLI 库 CallCSharp:

extern "C" {
    __declspec(dllexport) void foo()
    {
        // here you could use managed and unmanaged code
        Console.WriteLine("Hello, C# world...");
    }
Run Code Online (Sandbox Code Playgroud)

Python 脚本:

from ctypes import cdll
lib = cdll.LoadLibrary("./CallCSharp.dll")
lib.foo()
Run Code Online (Sandbox Code Playgroud)

有关使用 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 的信息)。


Viv*_*ard 5

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

通过使用

[ComVisible(true)]
Run Code Online (Sandbox Code Playgroud)

好的IronPython是Python语言的.net实现。该技术将在到达时使用.net 4.0的DLR,因此IronPython将具有更多的动态性(就是这样)。(如果您是Python专家,用英语来说,使用IronPython会让您有宾至如归的感觉)

因此,您可以选择IronPython,如果这样做,则可以跳过COM可见部分。由于两者(C#,Iron Python)都位于.Net下

http://ironpython.net/

请访问此处以获取对COM可见的示例C#DLL


小智 5

如果您不想使用IronPython, Python for .NET可以很好地工作.