2010-01-16 32 views
15

¿cómo puedo cargar un C# dll en python?Cómo cargar un dll de C# en python?

¿Tengo que poner un código adicional en los archivos C#? (como la exportación en archivos de C++)

No quiero usar IronPython. ¡Quiero importar un módulo a Python!

+0

Es posible que desee agregar un poco de aclaración. ¿Estamos hablando de * CPython * o * IronPython *? –

+0

Quiero importar un módulo en Python (no IronPython, entonces ...) –

+0

Vas a tener problemas. Un C# DLL está escrito en CIL y no es python, ni es legible por Python. Vas a ir completamente .NET y usar IronPython o sufrir el dolor de usar COM. ¿No hay alguna forma de que puedas usar un módulo nativo de Python? –

Respuesta

4

Responde la segunda parte de tu pregunta Intenta hacer visible la DLL COM.

utilizando el

[ComVisible(true)] 

Ok IronPython es una implemenatation .NET del lenguaje Python La tecnología va a usar el DLR de .NET 4.0 cuando llega por lo IronPython tendrá un mayor dinamismo (es esa una palabra). (En inglés si eres un gurú de Python, te sentirás más en casa cuando uses IronPython)

Así que puedes elegir IronPython, si lo haces, puedes omitir la parte visible de COM. Dado que tanto (C#, ironpython) están bajo .Net

http://ironpython.net/

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

+0

Ahora que he visto Ironpython, entendí de qué se trataba. No quiero eso. Quiero importar un módulo en python: P –

+0

Quiere decir Importar (puerto) código C# a Python o Importar un dll C# a Python –

+0

Importar y usar funciones de un C# Dll en Python –

16

El paquete Python for.NET y la implementación de Python IronPython ahora funcionan de la misma manera.

Ejemplo para un C# DLL MyDll.dll:

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

Ver this post para más detalles.

+1

intall primero por 'pip3 install pythonnet' – Felix

1

Si no desea utilizar soluciones como Python .NET o IronPython, es posible implementar un contenedor C++/CLI y usar tipos Pythons para cargarlo. Por ejemplo:

La biblioteca CallCSharp C++/CLI:

extern "C" { 
    __declspec(dllexport) void foo() 
    { 
     // here you could use managed and unmanaged code 
     Console.WriteLine("Hello, C# world..."); 
    } 

El Python script:

from ctypes import cdll 
lib = cdll.LoadLibrary("./CallCSharp.dll") 
lib.foo() 

Yo fuertemente recomiendo leer este blog: http://pragmateek.com/if-your-plumbing-doesnt-work-youre-just-not-using-enough-pipes/#more-1745

Se ocupa también de la problema que surge cuando el envoltorio de C++/CLI llama al código que está en otro ensamblado (obtendría algo así como un Viento owsError: [Error -532462766] Error de Windows 0xE0434352 de su secuencia de comandos de Python).

+0

¿Funciona esto en Mono y .NET Core? – denfromufa

+0

No lo sé. Y ya abandoné ese enfoque, no obtuve la carga de ensambles referenciados en ejecución. Trataré de descubrir Python .NET. – anhoppe

Cuestiones relacionadas