首页 > 解决方案 > 如何访问结构体数组,从 ffi 作为指针返回

问题描述

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

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

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

我能够访问数组的第一个元素,但似乎无法访问以下元素。

我做错什么了吗?

标签: node.jsarraysstructrefnode-ffi

解决方案


我花了一点时间才弄清楚这一点,因为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

推荐阅读