В настоящее время у нас есть старая библиотека c ++, которую мы хотим вызывать из узла, используя ffi по соображениям совместимости. Один из методов внутри библиотеки имеет следующее определение:
int CalculateValue(std::vector<DataItem> dataItems, int mode)
DataItem определяется как:
struct DataItem
{
const void *Data;
int Size;
}
Я пробовал несколько вариантов с ref-Array (который, очевидно, не подходит для использования)
const InputDataStruct = StructType({
Data: ref.refType(ref.types.void),
Size: ref.types.int32
});
const InputVectorType = ArrayType(InputDataStruct);
const calculator = ffi.Library(libPath, {
'CalculateValue': [ref.types.int32, [InputVectorType, ref.types.int32]]
});
Но я продолжаю получать ошибки сегментации при вызове этого метода. Я изменил сигнатуру как на узле, так и на c ++ для одного DataItem вместо вектора, тогда он работает безупречно. Как правильно выстроить вектор данных структур?