如何访问结构数组,从 ffi 作为指针返回

How to access a structure array, returned from ffi as a pointer

我在 DLL 中使用 ffi(-napi) 运行 函数,returns C 结构上的指针。

const structEl = new StructType({
    label: string;
});
const structResult = StructType({
    number_of_els: ref.types.int,
    els: ref.refType(structEl);
});

我希望 els 是一个结构数组。 This question 是关于作为参数的结构数组,但我找不到关于返回值的问题。

我可以访问数组的第一个元素,但我似乎无法访问后面的元素。

我做错了什么吗?

我花了一点时间才弄清楚这个问题,因为缺少 ref 的完整 api 文档。

缓冲区默认只分配给一个结构(因为它是一个指针),所以你需要自己重新分配一个缓冲区,这样它不仅指向第一个元素,而且在内存中更进一步。

这是使用 reinterpret 方法完成的:

    // const structType = new StructType({…});
    const myStructType = ref.refType(structType);
    const result = myLibraryStruct.reinterpret(n * myStructType.size); // with n being the number of elements in the array
    let el = ref.get(result, i * myStructType.size, structType); // retrieves the element in the array at rank i