为什么 `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 库使用 pData
的 void *
值调用它。大约一半的回调实际上 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>
应该修复它。
我正在使用具有以下签名的 node-ffi
实现回调:
const callback = ffi.Callback('void', ['int', 'void *'], (eMsg, pData) => {
console.log(pData);
console.log(`Buffer deref: ${ref.get(pData)}`);
});
底层 C 库使用 pData
的 void *
值调用它。大约一半的回调实际上 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>
应该修复它。