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

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

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

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


person aF.    schedule 16.01.2010    source источник
comment
Возможно, вы захотите добавить немного пояснений. Мы говорим об CPython или IronPython?   -  person Jason Baker    schedule 16.01.2010
comment
Я хочу импортировать модуль в Python (тогда не IronPython ..)   -  person aF.    schedule 16.01.2010
comment
Вы будете бороться. Библиотека C# написана на CIL и не является python, и Python ее не читает. Вы собираетесь либо полностью использовать .NET и использовать IronPython, либо страдать от использования COM. Разве вы не можете использовать собственный модуль Python?   -  person Callum Rogers    schedule 16.01.2010
comment
С помощью переполнения стека я это сделал. Я превратил свою DLL C# в DLL COM InterOp, а затем использовал ее в DLL C++. После этого я использовал ctypes для вызова функций C++ DLL :)   -  person aF.    schedule 20.01.2010


Ответы (4)


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

с помощью

[ComVisible(true)]

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

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

http://ironpython.net/

person Vivek Bernard    schedule 16.01.2010
comment
Теперь, когда я увидел Ironpython, я понял, что это было. Я не хочу этого. Я хочу импортировать модуль в Python: P - person aF.; 16.01.2010
comment
Вы имеете в виду импорт (порт) кода С# в Python или импорт dll C# в Python - person Vivek Bernard; 16.01.2010
comment
Импорт и использование функций из C# Dll в Python - person aF.; 16.01.2010
comment
Я предполагаю, что это решение недоступно до .net 4.0? Я пробовал с .net 2.0, но нет опции ComVisible - person Georg W.; 05.04.2018

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

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

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

Дополнительные сведения см. в этом сообщении.

person Vincent    schedule 28.11.2013
comment
сначала установите его pip3 install pythonnet - person Felix; 21.06.2017

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

person Warren    schedule 18.07.2013

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

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

person anhoppe    schedule 21.03.2017
comment
Не знаю. И я уже отказался от этого подхода, у меня не заработала загрузка ссылочных сборок. Попробую разобраться с Python .NET. - person anhoppe; 21.03.2017