Seite 2 von 2

Re: PythonNet - EventHandler Operanttypen Fehler

Verfasst: Donnerstag 18. Juni 2020, 15:59
von xXSkyWalkerXx1

Code: Alles auswählen

ThreadPool.QueueUserWorkItem(delegate {DeviceInformationChanged?.Invoke(null, lastInfo) } );
Kann es sein, dass ich den 'NoneType' Fehler deshalb bekomme, weil das Objekt 'null' ist?

Re: PythonNet - EventHandler Operanttypen Fehler

Verfasst: Donnerstag 18. Juni 2020, 16:34
von __blackjack__
@xXSkyWalkerXx1: Da hier keiner weiss ob und was diese Zeile mit dem ganzen Rest zu tun hat kann alles mögliche sein. Oder eben auch nicht. Was bedeutet das Argument denn wo hier null übergeben wird?

Re: PythonNet - EventHandler Operanttypen Fehler

Verfasst: Donnerstag 18. Juni 2020, 18:10
von xXSkyWalkerXx1
Hab die 2 Datein hier hochgeladen: https://github.com/xXSkyWalkerXx1/LibCronusMAX

Das 1. Argument in .Invoke() steht für das Objekt: https://docs.microsoft.com/de-de/dotnet ... etcore-3.1
Demnach wird kein Objekt übergeben.

Mir ist auch aufgefallen, dass der PublicKeyToken bei:

Code: Alles auswählen

# ...hier 'null' ist
self.device.IOStatusChanged += EventHandler[LibCronusMAX.IOStatus](self.ioChanged)

# ...hier ein richtigen Wert besitzt
self.device.IOStatusChanged += EventHandler[EventArgs](self.ioChanged)
Demnach scheint das 1. wohl nicht korrekt zu sein, sondern die Verwendung des 2. - nehme ich deshalb an.

Re: PythonNet - EventHandler Operanttypen Fehler

Verfasst: Donnerstag 18. Juni 2020, 19:00
von __blackjack__
@xXSkyWalkerXx1: Das ``null`` muss ja kein Problem sein wenn die Methode die mit `Invoke()` aufgerufen wird eine statische Methode ist. Da würde sich dann die Folgefrage anschliessen *ob* das denn eine statische Methode ist…

Re: PythonNet - EventHandler Operanttypen Fehler

Verfasst: Freitag 19. Juni 2020, 07:58
von xXSkyWalkerXx1
Die 'Invoke()' Methode wird in einer nicht-statischen Methode aufgerufen.

Re: PythonNet - EventHandler Operanttypen Fehler

Verfasst: Freitag 19. Juni 2020, 10:39
von xXSkyWalkerXx1
Also halten wir Mal fest:
  • Der Python-Code ist so richtig: " self.device.IOStatusChanged += EventHandler[LibCronusMAX.IOStatus](self.ioChanged) "
  • Der Typ der Klasse des EventHandlers ist 'null': " IOStatusChanged?.Invoke(null, lastIoStatus); "
D.h. somit kann Python auch nicht den NoneType-EventHandler mit dem EventHandler delegieren. Frage bleibt: (wie) kann man das lösen? :S

Re: PythonNet - EventHandler Operanttypen Fehler

Verfasst: Freitag 19. Juni 2020, 10:59
von __deets__
Der Typ ist nicht null. Der WERT ist null. Und wenn die ?-Syntax das gleiche ist wie bei Swift, dann ist auch ggf. schon IOStatusChanged null, denn das ist denke ich mal eine Kurzform von "mach das Invoke *NUR* wenn IOStatusChanged nicht null ist".

Ich glaube ich habe das schonmal gesagt, aber ich sags nochmal: benutz einfach C#. So cool IronPython und Co auch sind, fuer solche Probleme braucht man mehr Erfahrung in beiden Sprachen, um diese Lost-in-Translation-Momente zu loesen.

Re: PythonNet - EventHandler Operanttypen Fehler

Verfasst: Freitag 19. Juni 2020, 11:18
von xXSkyWalkerXx1
Stimmt, den Wert - meinte ich doch. ^^

Hmm, also wenn ich an die Kompatibilität mit der API, die Performance meines Algorithmus denke und weitere Vorhaben denke, wird es wohl leider darauf hinauslaufen C# bzw. C++ weiter lernen zu müssen.
Schade, kostet mich wieder viel Zeit. :D

Re: PythonNet - EventHandler Operanttypen Fehler

Verfasst: Freitag 19. Juni 2020, 11:22
von __deets__
Mit jeder Sprache wird's einfacher. Gerade C# ist ziemlich gut. C++... ist ein anderes Biest, aber ggf. ist diese managed Variante handhabbar.

Re: PythonNet - EventHandler Operanttypen Fehler

Verfasst: Freitag 19. Juni 2020, 11:35
von xXSkyWalkerXx1
Warum ist C++ ein Biest? :D

Re: PythonNet - EventHandler Operanttypen Fehler

Verfasst: Freitag 19. Juni 2020, 11:51
von __deets__
Weil es semantisch und syntaktisch überladen ist, mit undefiniertem Verhalten durchsetzt, und darum herum ein arkanes, zersplittertes System aus Compilern und Build Systemen einem das Leben schwer macht.

Re: PythonNet - EventHandler Operanttypen Fehler

Verfasst: Freitag 19. Juni 2020, 12:09
von xXSkyWalkerXx1
Aber eigentlich wäre es widerrum ein Vorteil C++ weiter zu lernen - wegen Studium, oder nicht?
Und läuft dann OpenCV auch viel schneller?

Re: PythonNet - EventHandler Operanttypen Fehler

Verfasst: Freitag 19. Juni 2020, 12:52
von __deets__
Keine Ahnung, was du studieren willst, oder ob die da C++ benutzen. Und solange du keinen Pixel-Level Code in Python schreibst, wuerde ich auch nicht besonders viel Performancegewinn erwarten. Du stoepselst mit Python ja nur in C++ geschriebene Algorithmen zusammen, da geht nicht so viel verloren.

Lern wegen mir C++ wenn du magst, eine relevante Sprache ist das. Es ist halt nur eine sauschwere Sprache. Und ich kenne diverse Leute, die ihr den Ruecken gekehrt haben, um eben mit C# oder Rust oder aehnlichem gluecklicher zu werden.