У меня есть структура 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;
с тем же результатом.
Как правильно это сделать?