Как вызвать метод в c ++ из node-ffi с вектором структур в качестве параметров?

В настоящее время у нас есть старая библиотека 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 вместо вектора, тогда он работает безупречно. Как правильно маршалировать вектор данных структур?

0

Решение

Ты не можешь std::vector определяется реализацией, и ее внутреннее зависит от компилятора. На данный момент и насколько я знаю Узел-FFI не имеет тип, который соответствует std::vector,

Так как кажется, что вы можете изменить сигнатуру метода, я бы рекомендовал изменить метод для принятия простого массива в стиле C, который совместим с узел-FFI-х ArrayType:

int CalculateValue(DataItem *dataItemsRawArray, int dataItemsCount, int mode)
{
std::vector<DataItem> dataItems{dataItemsRawArray, dataItemsRawArray + dataItemsCount};
...
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]