我们目前有一个旧的c ++库,出于兼容性原因,我们希望使用ffi从节点调用它。 lib中的一种方法具有以下定义:
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]]
});
但是在调用此方法时,我总是遇到分段错误。我已经将node和c ++上的签名都更改为单个DataItem而不是vector,然后它可以正常工作。如何正确编组给定结构的向量?
答案 0 :(得分:1)
不能。 std::vector
是实现定义的,其内部取决于编译器。到目前为止,据我所知, node-ffi 还没有对应于std::vector
的类型。
由于听起来您可以更改方法签名,所以我建议您更改方法以接受简单的C样式数组,该数组与 node-ffi的 ArrayType
兼容:
int CalculateValue(DataItem *dataItemsRawArray, int dataItemsCount, int mode)
{
std::vector<DataItem> dataItems{dataItemsRawArray, dataItemsRawArray + dataItemsCount};
...