Pasando bytes como parámetro a c #?

Actualmente estoy atascado al intentar llamar métodos ac # desde python. Estoy usando python 3.2 y no IronPython. Utilicé pip para instalar la última versión de python.net

El problema ocurre (como se discute a menudo) al usar los parámetros ref o out.

Aquí está mi código hasta ahora:

import clr path = clr.FindAssembly("USB_Adapter_Driver") clr.AddReference(path) from USB_Adapter_Driver import USB_Adapter gpio = USB_Adapter() version2 = '' status, version = gpio.version(version2) print ('status: ' + str(status)) print ('Version: ' + str(version)) readMask = bytearray([1]) writeData = bytearray([0]) print (readMask) print (writeData) status, readData = gpio.gpioReadWrite(b'\x01',b'\x00',b'\x00') status, readData = gpio.gpioReadWrite(readMask[0],writeData[0],b'\x00') status, readData = gpio.gpioReadWrite(readMask[0],writeData[0],) 

He tenido algunos problemas importantes para conseguir clr. corriendo en absoluto Pero en esta configuración exacta parece funcionar (necesito guardar la ruta de acceso a una variable, de lo contrario no funcionará, tampoco puedo escribir la ruta de la DLL en clr.AddReference (ruta de acceso) porque tampoco funcionará)

El método de la versión c # se ve así:

 public USB_Adapter_Driver.USB_Adapter.Status version(ref string ver) 

Mi variable de estado obtiene un valor que funciona perfectamente con la enumeración de estado para la clase c #.

El problema es: después de la llamada, mi variable “versión” está vacía. ¿Por qué? De acuerdo con: ¿Cómo usar un método .NET que se modifique in situ en Python? Esta debería ser una forma legal de hacer las cosas. También intenté usar la versión explícita, pero mi espacio de nombres clr no contiene clr.Reference ().

El siguiente (y más grave) problema es pio.gpioReadWrite (). Aquí está la información sobre este:

 public USB_Adapter_Driver.USB_Adapter.Status gpioReadWrite(byte readMask, byte writeData, ref byte readData) 

Aquí me sale el mensaje de error:

 TypeError: No method matches given arguments 

No importa cuál de las llamadas que utilizo desde arriba. Todos ellos fallan.

Aquí está la salida completa de una ejecución de depuración:

 d:\[project path]\tests.py(6)() status: 6 Version: bytearray(b'\x01') bytearray(b'\x00') Uncaught exception. Entering post mortem debugging Running 'cont' or 'step' will restart the program d:\[project path]\tests.py(28)() status, readData = gpio.gpioReadWrite(readMask[0],writeData[0],) (Pdb) Traceback (most recent call last): File "D:\WinPython-64bit-3.4.4.2Qt5\python-3.4.4.amd64\lib\pdb.py", line 1661, in main pdb._runscript(mainpyfile) File "D:\WinPython-64bit-3.4.4.2Qt5\python-3.4.4.amd64\lib\pdb.py", line 1542, in _runscript self.run(statement) File "D:\WinPython-64bit-3.4.4.2Qt5\python-3.4.4.amd64\lib\bdb.py", line 431, in run exec(cmd, globals, locals) File "", line 1, in  File "d:\[project path]\tests.py", line 28, in  status, readData = gpio.gpioReadWrite(readMask[0],writeData[0],) TypeError: No method matches given arguments 

Espero que uno de ustedes tenga una idea sobre cómo solucionar esto.

Gracias kevin

Python.Net no maneja parámetros de referencia / salida como IronPython.
status, readData = gpio.gpioReadWrite(b'\x01',b'\x00',b'\x00') no es del todo correcta ya que Python.Net no devolverá un readData actualizado como segundo resultado.
Puede manejar los parámetros de referencia utilizando la reflexión. Echa un vistazo a mi respuesta a una pregunta similar aquí

Hay una plantilla de código en bruto para su caso:

 import clr clr.AddReference("USB_Adapter_Driver") import System import USB_Adapter_Driver myClassType = System.Type.GetType("USB_Adapter_Driver.USB_Adapter, USB_Adapter_Driver") method = myClassType.GetMethod("gpioReadWrite") parameters = System.Array[System.Object]([System.Byte(1),System.Byte(0),System.Byte(0)]) gpio = USB_Adapter_Driver.USB_Adapter() status = method.Invoke(gpio,parameters) readData = parameters[2]