lundi 13 juin 2016

Passing bytes as parameter to c#?

I am currently stuck while trying to call a c# methods from python. I am using python 3.2 and not IronPython. I used pip to install the latest version of python.net

Problem occurs (as often discussed) while using ref or out parameters.

Here is my code so far:

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],)

I have had some major issues getting clr. running at all. But in this exact config it seems to work (I need to save the path to a variable, otherwise it wont work, I also cant type the path the dll in clr.AddReference(path) because this wont work as well)

The c# version method looks like this:

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

My status variable gets a value which works perfectly with the status enum for the c# class.

Problem is: after the call my variable "version" is empty. Why? According to: How to use a .NET method which modifies in place in Python? this should be a legal way to do things. I also tried to use the explicit version but my namespace clr does not contain clr.Reference().

The next (and more severe) problem is pio.gpioReadWrite().Here the info about this one:

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

Here I get the error message:

TypeError: No method matches given arguments

It doesn't matter which of the calls I use from above. All of them fail.

Here is the full output of a debugging run:

d:[project path]tests.py(6)<module>()
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)<module>()
status, readData = gpio.gpioReadWrite(readMask[0],writeData[0],)
(Pdb) Traceback (most recent call last):
  File "D:WinPython-64bit-3.4.4.2Qt5python-3.4.4.amd64libpdb.py", line 1661, in main
    pdb._runscript(mainpyfile)
  File "D:WinPython-64bit-3.4.4.2Qt5python-3.4.4.amd64libpdb.py", line 1542, in _runscript
    self.run(statement)
  File "D:WinPython-64bit-3.4.4.2Qt5python-3.4.4.amd64libbdb.py", line 431, in run
    exec(cmd, globals, locals)
  File "<string>", line 1, in <module>
  File "d:[project path]tests.py", line 28, in <module>
    status, readData = gpio.gpioReadWrite(readMask[0],writeData[0],)
TypeError: No method matches given arguments

Hope one of you has an idea on how to fix this.

Thanks, Kevin

Aucun commentaire:

Enregistrer un commentaire