Привет!
Понадобилось мне поработать с Cypress USB в программе на C++/CLR. Мое устройство выполнено на микросхеме CY7C68013A. Это микроконтроллер USB 2.0. Для общения с ним используется канал управления (EP2 на вывод, EP4 на ввод). Передача данных управления производится через специальную структуру:
#ifndef __TYPES
  #define __TYPES
  typedef unsigned char  byte;
  typedef unsigned short word;
#endif
#define SCUSB_CONTROL_STRUCT_DATA_LEN           (512-4)
#pragma pack(push,1)
typedef struct {
  byte cmd;     // SCUSB I/O command code
  byte toggle;  // Free running counter for proper data answer
  word len;     // Data size in bytes
  byte dat[SCUSB_CONTROL_STRUCT_DATA_LEN];
} SCUSB_CONTROL_STRUCT;
#pragma pack(pop)
SCUSB_CONTROL_STRUCT cs;
В программе на C++ (обычном, не управляемом) никаких проблем:
pControlOutEndpt->XferData((PUCHAR)&cs, sizeof(cs));
А в программе на C++/CLR это выглядит по другому.
Функция передачи/приема данных по USB выглядит так:
public : virtual bool XferData(array<unsigned char>^ buf, int len) new
    Member of CyUSB::CyUSBEndPoint
Как сделать такую передачу в программе C++/CLR?
Разнообразные попытки вызывают ошибки:
  ScusbControlOutEndPt->XferData(array<System::Byte>^cs, sizeof(SCUSB_CONTROL_STRUCT));
или
  array<System::Byte>^ bOutbuf = gcnew (cs);
  ScusbControlOutEndPt->XferData(bOutbuf, sizeof(SCUSB_CONTROL_STRUCT));
и другое в этом роде
Помогите, пожалуйста!