为什么 `node-ffi` 回调返回一个带有 `void *` 而不是带有 `int *` 的空缓冲区?

Why is a `node-ffi` Callback returning an empty Buffer with `void *` but not with `int *`?

我正在使用具有以下签名的 node-ffi 实现回调:

const callback = ffi.Callback('void', ['int', 'void *'], (eMsg, pData) => {
    console.log(pData);
    console.log(`Buffer deref: ${ref.get(pData)}`);
});

底层 C 库使用 pDatavoid * 值调用它。大约一半的回调实际上 return 一个 int * 值,而另一半 pData 是更复杂的数据(即 Struct)。 ref.get(pData) 最终变成了 null。如果我将 Callback 定义更改为使用 int * 而不是 void *ref.get(pData) return 就是正确的值。我不明白的是为什么 void * 最终成为一个大小为 0 的缓冲区 not 正确取消引用(即使 pData 一个int *).

我觉得我错过了一些东西,但在我的一生中,我无法看到那会是什么。有人可以帮忙吗?

我遇到了类似的问题,我所做的是将返回的 Buffer 的 length 属性 设置为将要返回的东西的大小。 因为是void *类型,所以node-ffi基本不知道多长时间的Buffer会返回给它

所以在这种情况下,pData.length = <size of structure> 应该修复它。