Как загрузить c# dll в python?

Как я могу загрузить dll C# в python?

Мне нужно добавить дополнительный код в файлы c#? (например, экспорт в файлы c++)

Я не хочу использовать IronPython. Я хочу импортировать модуль в Python!

4 ответов


Это ответ на вторую часть вашего вопроса Попробуйте сделать DLL COM видимым.

С помощью

[ComVisible(true)]

ОК установить IronPython-это .чистая implemenatation языке Python Технология собирается использовать DLR .net 4.0, когда он прибудет, поэтому IronPython будет иметь больше динамизма (это слово). (На английском языке, если вы гуру Python, вы будете чувствовать себя как дома, когда используете IronPython)

таким образом, вы можете выбрать IronPython, если вы это сделаете вы можете пропустить видимую часть COM. Поскольку оба (C#, Iron Python) находятся под .Net

http://ironpython.net/

посетите здесь для примера C# DLL, который виден COM


пакета Python for.NET и реализация Python установить IronPython теперь работайте так же.

пример для библиотеки DLL C#MyDll.dll:

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

посмотреть этот пост для получения более подробной информации.


Python для .NET работает хорошо, если вы не хотите использовать IronPython.


Если вы не хотите использовать такие решения, как Python .NET или IronPython, можно реализовать оболочку C++/CLI и использовать типы pythons для ее загрузки. Например:

библиотека 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: [Error -532462766] Ошибка Windows 0xE0434352 из вашего скрипта Python).