将字节作为参数传递给c#?

我在尝试从python调用ac#方法时遇到困难。 我使用的是python 3.2而不是IronPython。 我用pip安装了最新版本的python.net

使用ref或out参数时出现问题(如经常讨论的那样)。

这是我到目前为止的代码:

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

我遇到了一些重大问题。 一直在奔跑。 但在这个确切的配置它似乎工作(我需要保存路径到一个变量,否则它不会工作,我也无法在clr.AddReference(路径)中键入路径dll因为这不会工作)

c#版本方法如下所示:

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

我的状态变量获得的值与c#类的状态枚举完美匹配。

问题是:在调用之后我的变量“version”为空。 为什么? 根据: 如何使用在Python中修改的.NET方法? 这应该是一种合法的做事方式。 我也尝试使用显式版本,但我的命名空间clr不包含clr.Reference()。

下一个(也是更严重的)问题是pio.gpioReadWrite()。这里有关于这个的信息:

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

在这里我收到错误消息:

 TypeError: No method matches given arguments 

我从上面使用哪个呼叫并不重要。 所有这些都失败了。

以下是调试运行的完整输出:

 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 

希望你们中的一个人知道如何解决这个问题。

谢谢,凯文

Python.Net不处理像IronPython这样的ref / out参数。
status, readData = gpio.gpioReadWrite(b'\x01',b'\x00',b'\x00')调用不太正确,因为Python.Net不会返回更新的readData作为第二个结果。
您可以使用reflection处理ref参数。 在这里查看我对类似问题的回答

您的案例有一个粗略的代码模板:

 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]