如何访问结构数组,从 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
我在 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