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

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

21 голосов
/ 16 января 2010

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

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

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

Ответы [ 4 ]

21 голосов
/ 28 ноября 2013

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

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

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

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

5 голосов
/ 19 июля 2013

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

4 голосов
/ 16 января 2010

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

с помощью

[ComVisible(true)]

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

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

http://ironpython.net/

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

2 голосов
/ 21 марта 2017

Если вы не хотите использовать такие решения, как 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/#more-1745

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

...