如何从 node-ffi 调用 c++ 中以结构向量作为参数的方法?
How to call a method in c++ from node-ffi with a vector of structs as parameters?
我们目前有一个旧的 c++ 库,出于兼容性原因,我们希望使用 ffi 从节点调用它。lib 中的一种方法具有以下定义:
int CalculateValue(std::vector<DataItem> dataItems, int mode)
数据项定义为:
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 而不是矢量,然后它完美运行。如何正确封送给定结构的向量?
你不能。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};
...
相关文章:
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- 标准::向量声明中使用的模板参数
- 使用 C++ 将命令行参数拆分为参数/向量
- 如何在 c++ 中定义接受不同参数类型的函数向量?
- 如何将向量中的可变参数转换为参数的持有者?
- C++向量默认为成员参数
- 使用向量初始化参数化构造函数的对象数组
- 有什么方法可以将具有不同模板参数的模板类实例放入向量中?
- OpenCL 是否支持向量作为内核参数?
- 使用并行参数向量调用元素向量的成员函数
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 将不同类型的模板参数包提取到双精度向量中会产生警告
- 如何从 node-ffi 调用 c++ 中以结构向量作为参数的方法?
- 将任意模板向量作为函数参数C++传递
- 为什么我们需要在优先级队列声明中添加一个向量作为参数?
- 如何使用非特异性类型制作向量参数
- C++ 类中的向量参数
- 采用向量参数的函数模板回文
- 将向量参数为空传递
- C++和python:向量参数的TypeError解析