Использование массива в структуре с вызовами node-ffi - PullRequest
0 голосов
/ 15 мая 2019

У меня есть структура ac, где один из элементов является указателем на байтовый массив, и я не могу получить к нему доступ с помощью node-ffi / ref-struct.

Структура, используемая c-lib, выглядиткак это

typedef struct structCanalMsg {
    unsigned long flags;                /* CAN message flags */
    unsigned long obid;                 /* Used by driver for channel info etc. */
    unsigned long id;                   /* CAN id (11-bit or 29-bit) */
    unsigned char sizeData;             /* Data size 0-8 */
    unsigned char data[8];              /* CAN Data  */
    unsigned long timestamp;            /* Relative time stamp for package in microseconds */
} canalMsg;

Я попытался представить это с помощью

let canalEvent_t = ref.types.void;
let canalData_t = ref.types.uchar;
let canalEventPtr_t = ref.refType(canalEvent_t);
let canalDataPtr_t = ref.refType(canalData_t);
let canalDataPtrPtr_t = ref.refType(canalDataPtr_t);


let flags_t = ref.types.long;
let obid_t = ref.types.long;
let id_t = ref.types.long;
let sizedata_t = ref.types.uchar;
let data_t = canalDataPtrPtr_t;
let timestamp_t = ref.types.long;

var canalEvent = Struct({
  flags: flags_t,
  obid: obid_t,
  id: id_t,
  sizeData: sizedata_t,
  data: data_t,
  timestamp: timestamp_t
})

var ev = new canalEvent;
ev.flags = 1; // Extended
ev.timestamp = 0x4321;
ev.obid = 0x1234; // Not used
ev.id = 0x999;
var buf = Buffer.alloc(8);
buf[0] = 99;
buf[1] = 89;
buf[2] = 79;
buf[3] = 69;
ev.data = buf.ref();
ev.sizeData = 4;

и многими подобными вариантами, но все они приводят к тому, что все данные равны нулю, в то время как все остальные элементы установлены правильно,Я также пытался

var bArray = ArrayType(ref.types.uchar);
var dataArray = new bArray(8);
dataArray[0] = 11;
dataArray[1] = 22;
dataArray[2] = 33;
dataArray[3] = 44;

с тем же результатом.

Как правильно это сделать?

...