Mam kilka plików .dll z klasami zaprojektowanymi do kontrolowania urządzenia zewnętrznego podłączonego do mojego pulpitu za pośrednictwem sieci Ethernet. Chciałbym zaimportować te klasy do Pythona i użyć ich funkcji/zmiennych członkowskich, aby sterować urządzeniem.jak uzyskać dostęp do klasy z biblioteki DLL w python?
Mam spojrzał na szereg opcji, w tym:
-ctypes (wydawały się działać dobrze dla funkcji, ale nie klasy). Tutaj "DotNet \ Aerotech.Ensemble.dll" jest moją biblioteką dll, a "Sieć" jest klasą w tej bibliotece z funkcją członka "Połącz". Obciążenia biblioteki, ale nie może uzyskać dostępu do klasy ...
>>> 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 dla .NET, ale te wydają się być całkowicie oddzielne języków i chcę, aby być w stanie zrobić wszystko z jednego miejsca (pyton).
-SWIG. Dokumentacja SWIG wydaje się wskazywać, że może obsługiwać importowanie klas, ale wydaje się również wymagać, aby kod C++ i pliki nagłówkowe (które nie są) były pakowane do użycia jako moduł python.
Jestem początkujący i dość zagubiony, więc każda pomoc jest doceniana!
EDIT:
@SvenMarnach: Musiałem spojrzeć na IronPython i był w stanie dostać pracy z moich dll, ale chcę to zrobić w Python ponieważ jestem już robi wiele rzeczy w tym języku. Chcę zintegrować te funkcje dll lub klas lub cokolwiek z istniejącymi programami python.
Podczas pracy z IronPythonem natknąłem się na Python for .NET, który twierdzi, że jest w stanie zainstalować .Net do istniejących instalacji Pythona ... To działa (tzn. Mogę uzyskać dostęp do plików dll i kontrolować moje urządzenie), jeśli użyj go w katalogu, do którego pobrałem python dla plików .NET, ale jeśli spróbuję go w jakimś innym katalogu (pamiętając o dołączeniu katalogu python.net do sys.path), pojawi się błąd
O ile mi wiadomo, biblioteki DLL nie mogą "zawierać klas". Mogą zawierać funkcje, a kompilatory będą zestawiać nazwy metod z nazwami funkcji przed umieszczeniem ich w bibliotece DLL. To zależy całkowicie od języka, w którym są zaimplementowane biblioteki DLL. (Uwaga: nie znam platformy .NET i Windows). –
Może to nie być istotne, ale często "biblioteki dll" nie są binarnie skompilowanymi bibliotekami dll , są to C# kod bajtowy z rozszerzeniem dll. – aquavitae
http: // stackoverflow.com/questions/2082159/how-to-export-c-sharp-methods – cons0ul