[Python-de] Windows-DLLs in Python einbinden
Scherer Ralf
RS.2007 at gmx.de
Fr Dez 14 12:00:29 EST 2018
Hallo zusammen,
als nicht Informatiker gibt es Dinge die ich erst einmal nicht verstehe.
Dann wird gesucht und "learning by doing" gemacht. Aber zu bestimmten
Fragen finde ich einfach keine Antwort, darum dachte ich "Frag mal
jemand der das gelernt hat". Sollte ich Begriffe wie "Funktion, Methode"
durcheinander würfeln bitte ich nachsichtige Korrektur ;)
1.
In diversen Quellen wird für Windows-DLLs ein Wrapper geschrieben z.B.
ftd2xx...
In allen Beispielen die ich bisher gesehen habe wurden die
DLL-Funktionen als _einzelne_ Funktionen eingebunden und nicht als
Methode einer Klasse, warum???
Mir erschien es sinnvoll eine DLL mit Ihren Funktionen in eine Klasse zu
legen.
Gibt es Nachteile, widerspricht das irgendeiner Regel, was gibt es zu
beachten, ...?
2.
Wie lädt man die Funktionen der DLL korrekt, sauber, elegant?
Begonnen habe ich so:
(Ich habe die Methoden in eine Klasse gelegt siehe 1. darum das "self")
def __init__(self):
self.__dllObject = windll.LoadLibrary("diomgr")
self.DIOMGR_Setup = self.__dllObject.DIOMGR_Setup
self.DIOMGR_Setup.argtypes=[ c_int, c_char_p, POINTER(c_long ),
POINTER(c_short), POINTER(c_long ), c_char_p ]
...
und dann gab es eine Methode der class DIOMGR:
def Setup(self,ben):
self.benchName = tool.GetStringBuffer(ben)
self.DIOMGR_Setup( self.seqCon, self.benchName,
byref(self.resourceID), self.pErrorOccurred,
self.pErrorCode, self.errorMessage)
...
Dann habe ich folgende "Schreibweise" gefunden:
Setup_Para = par_cao + ((1, "pBench", None),
(1,"pID",byref(self.RID)), ) + par_err
Setup_Proto = WINFUNCTYPE ( None, *( pro_cao +
(c_char_p, POINTER(c_long), ) + pro_err ) )
_self._Setup = Setup_Proto (("DIOMGR_Setup", __dllOb), Setup_Para)_
Diese Schreibweise finde ich wegen der "named Parameter" und den Default
Parametern eleganter, Frage ist: "Macht es Sinn?", wo sind die "Fallstricke"
Was ist besser/korrekter, geht es eleganter? So etwa "dict of para, dict
of proto, function friss beides => Ergebnis dict of function" und wie
funktioniert der call?
Ich habe ca. 10-20 DLLs die ich in Python einbinden will und habe keine!
Probleme damit den Kram komplett, auch mehrfach umzuschreiben (UltraEdit
ist da eine grosse Hilfe, oder perl, oder...), ich möchte halt wissen
warum, was bringt es und es muss (sofern das möglich ist) "Bomben fest"
laufen.
Ein entspanntes WE (sofern das am 14.12. möglich ist)
Ralf
Mehr Informationen über die Mailingliste python-de