【问题标题】:How to call a method in c++ from node-ffi with a vector of structs as parameters?如何使用结构向量作为参数从node-ffi调用c ++中的方法?
【发布时间】:2019-02-05 14:23:51
【问题描述】:

我们目前有一个旧的 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 而不是向量,然后它可以完美运行。如何正确编组给定结构的向量?

【问题讨论】:

    标签: c++ node-ffi


    【解决方案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};
        ...
    

    【讨论】:

    • @Sneha 我不这么认为,但你必须问作者,而不是我。我不隶属于 node-ffi 或 ref,所以我不能真正谈论他们可能有或没有的任何未来计划。
    • 好的。谢谢。很抱歉打扰您。
    猜你喜欢
    • 2013-09-09
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多