Как загрузить 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
Пакет 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), где он хорошо объяснил.