2010-01-16 5 views
15

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

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

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

+0

Возможно, вы захотите добавить немного разъяснений. Мы говорим о * CPython * или * IronPython *? –

+0

Я хочу импортировать модуль в Python (а не IronPython, то ..) –

+0

Вы собираетесь бороться. C# DLL записывается в CIL и не является питоном, и не читается python. Вы собираетесь либо выходить из .NET, либо использовать IronPython или страдать от использования COM. Не можете ли вы использовать собственный модуль python? –

ответ

4

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

с помощью

[ComVisible(true)] 

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

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

http://ironpython.net/

Visit here for a sample C# DLL which is visible to COM

+0

Теперь, когда я увидел Ironpython, я понял, что это такое. Я не хочу этого. Я хочу импортировать модуль в python: P –

+0

Вы имеете в виду код импорта (порт) C# на Python или импортируете dll C# в Python –

+0

Импорт и использование функций из C# Dll в Python –

16

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

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

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

См this post для более подробной информации.

+1

intall it first by 'pip3 install pythonnet' – Felix

1

Если вы не хотите использовать такие решения, как 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..."); 
    } 

Питон скрипт:

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 вызывает код, который находится в другой сборке (вы получите что-то вроде Wind owsError: [Ошибка -532462766] Ошибка Windows 0xE0434352 из вашего скрипта Python).

+0

Работает ли это на Mono и .NET Core? – denfromufa

+0

Не знаю. И я уже отказался от этого подхода, я не получил загрузку ссылочных сборок. Я попытаюсь вычислить Python .NET. – anhoppe

Смежные вопросы