как получить доступ к классу из dll в python?

У меня есть несколько файлов .dll с классами, предназначенными для управления внешним устройством, подключенным к моему рабочему столу через Ethernet. Я хотел бы импортировать эти классы в python и использовать их функции-члены/переменные и т. д. для управления устройством.

Я рассмотрел несколько вариантов, включая:

-ctypes (который, похоже, хорошо работает для функций, но не для классов). Здесь «DotNet\Aerotech.Ensemble.dll» — это моя dll-библиотека, а «Сеть» — это класс в этой библиотеке с функцией-членом «Connect». Библиотека загружается, но я не могу получить доступ к классу...

>>> from ctypes import *
>>> lib = cdll.LoadLibrary('DotNet\Aerotech.Ensemble.dll')
>>> lib.Network.Connect()
Traceback (most recent call last):
  File "", line 1, in 
  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 для .Net, но это, похоже, совершенно разные языки, и я хочу иметь возможность делать все из одного места (python).

-ПОВОРОТ. Документация SWIG, по-видимому, указывает, что она может обрабатывать импорт классов, но также, по-видимому, требует, чтобы код C++ и файлы заголовков (которых у меня нет) были обернуты для использования в качестве модуля python.

Я новичок и немного заблудился, поэтому буду признателен за любую помощь!

РЕДАКТИРОВАТЬ:

@SvenMarnach: Я взглянул на IronPython и смог заставить его работать с моими файлами dll, но я хочу сделать это в Python, так как я уже много делаю вещей на этом языке. Я хочу интегрировать эти функции или классы dll или что-то еще в существующие программы python.

Однако, заставляя IronPython работать, я наткнулся на Python для .NET, который утверждает, что может установить .Net осведомленность в существующие установки Python... Это работает (т.е. я могу получить доступ к dll файлы и управлять своим устройством), если я использую его в каталоге, в который я загрузил файлы python для .NET, но если я попробую его в каком-то другом каталоге (не забывая добавить каталог python.net к sys.path), вы получить ошибку ImportError: динамический модуль не определяет функцию инициализации (initclr)

7
задан user1278616 20 March 2012 в 17:26
поделиться