使用WPF开发CH347T上位机,已对照官方的CH341的CSHARP例程对CH347DLL.H进行了重写,以下为CH347读数据的方法重写前后对比:
//SPI4读数据 无需先写数据,效率较CH347SPI_WriteRead高很多(原CH347DLL.H内接口) BOOL WINAPI CH347SPI_Read(ULONG iIndex, //指定设备序号 ULONG iChipSelect, //片选控制,位7为0则忽略片选控制,位7为1进行片选操作 ULONG oLength, //准备发出的字节数 PULONG iLength, //准备读入的数据字节数 PVOID ioBuffer); //指向一个缓冲区,放置准备从DOUT写出的数据,返回后是从DIN读入的数据
//SPI4读数据 无需先写数据,效率较CH347SPI_WriteRead高很多(重写后的C#接口) [DllImport("CH347DLL.DLL", EntryPoint = "CH347SPI_Read")] public static extern bool CH347SPI_Read(uint iIndex, //指定设备序号 uint iChipSelect, //片选控制,位7为0则忽略片选控制,位7为1进行片选操作 uint oLength, //准备发出的字节数 uint iLength, //准备读入的数据字节数 byte[] ioBuffer); //指向一个缓冲区,放置准备从DOUT写出的数据,返回后是从DIN读入的数据
我是C#新手,不太明白为什么PVOID ioBuffer 为什么是直接写成 byte[] ioBuffer,正常如果直接传缓冲区数组进去,接口里面的程序不会无法访问外面定义的缓冲区数组吗,在实际在调用过程中也是报错:
尝试更改传入的变量,改成IntPtr ioBuffer传数组首地址指针、或改成ref byte[] ioBuffer传数组引用、或是将数组首地址转为byte[]数组再传入,都是一样报错,不知道是不是CH347DLL.cs写的有问题,附上我重写的CH347DLL.cs,跪求解决方法