Tengo un puñado de archivos .dll con clases diseñadas para controlar un dispositivo externo conectado a mi escritorio a través de ethernet. Me gustaría importar estas clases a python y usar sus funciones miembro/variables, etc. para controlar el dispositivo.cómo acceder a una clase desde un dll en python?
He mirado en un número de opciones que incluyen:
-ctypes (que parecían funcionar bien para funciones pero no clases). Aquí "DotNet \ Aerotech.Ensemble.dll" es mi biblioteca dll, y "Network" es una clase en esa biblioteca con una función de miembro "Connect". Las cargas de la biblioteca, pero no pueden acceder a la clase ...
>>> from ctypes import *
>>> lib = cdll.LoadLibrary('DotNet\Aerotech.Ensemble.dll')
>>> lib.Network.Connect()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python26\lib\ctypes\__init__.py", line 366, in __getattr__
func = self.__getitem__(name)
File "C:\Python26\lib\ctypes\__init__.py", line 371, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: function 'Network' not found
-IronPython/Python para .Net pero éstas parecen ser las lenguas separadas por completo y quiero ser capaz de hacer de todo, desde un solo lugar (pitón).
-SWIG. La documentación de SWIG parece indicar que puede manejar clases de importación, pero también parece requerir código C++ y/o archivos de encabezado (que no tengo) para envolver para usar como un módulo de Python.
Soy un principiante y bastante perdido aquí, así que se agradece cualquier ayuda!
EDIT:
@SvenMarnach: Yo tenía un aspecto en IronPython y fue capaz de conseguir que funcione con mis archivos dll, pero quiero hacer esto en Python ya que ya estoy haciendo un montón de cosas en ese idioma Quiero integrar estas funciones o clases dll o lo que sea en programas Python existentes.
Al hacer funcionar IronPython, sin embargo, tropecé al Python for .NET que afirma poder instalar .Net awareness en las instalaciones de python existentes ... Esto funciona (es decir, puedo acceder a los archivos dll y controlar mi dispositivo) si Úselo en el directorio en el que descargué el pitón para archivos .NET, pero si lo intento en algún otro directorio (recordando agregar el directorio python.net al sys.path), aparece un error ImportError: dynamic module does not define init function (initclr)
Por lo que yo sé, las DLL no pueden "contener clases". Pueden contener funciones, y los compiladores manipularán nombres de métodos a nombres de funciones antes de ponerlos en una DLL. Así que esto depende enteramente de la lengua de los archivos DLL se implementan en (Negación: No estoy familiarizado con .NET y la plataforma de Windows.). –
Esto puede no ser relevante, pero "DLL" con bastante frecuencia dotnet no son en realidad archivos DLL compilados binarios , son C# bytecode con una extensión dll. – aquavitae
http: // stackoverflow.com/questions/2082159/how-to-export-c-sharp-methods – cons0ul