Как загрузить C# DLL в Python?

Как я могу загрузить AC# DLL в Python?

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

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

5 ответов

Решение

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

используя

[ComVisible(true)]

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

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

http://ironpython.net/

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

Пакет Python для.NET и реализация Python IronPython теперь работают одинаково.

Пример для C# DLL MyDll.dll:

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

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

Если вы не хотите использовать такие решения, как Python .NET или IronPython, можно реализовать оболочку C++/CLI и использовать ctypes 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/

Он также решает проблему, которая возникает, когда оболочка C++/CLI вызывает код, который находится в другой сборке (тогда вы получите что-то вроде ошибки Windows: [Ошибка -532462766] Ошибка Windows 0xE0434352 из вашего скрипта Python).

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

Если вам нужны дополнительные объяснения, просмотрите видео на YouTube (https://www.youtube.com/watch?v=lnsTJRY1jPU), где он хорошо объяснил.

Другие вопросы по тегам