0

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

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

底层 C 库void *使用pData. 大约一半的回调实际上返回一个int *值,而另一半pData是更复杂的数据(即Struct)。最终ref.get(pData)成为null. 如果我将Callback定义更改为使用int *而不是void *ref.get(pData)则返回正确的值。我无法弄清楚为什么void *最终是一个大小为 0 的 Buffer不能正确取消引用(即使pData int *)。

我觉得我错过了一些东西,但我一辈子都看不到那会是什么。任何人都可以帮忙吗?

4

1 回答 1

1

我有一个类似的问题,我所做的是将length返回的 Buffer 的属性设置为将返回的东西的大小。因为是void *type,node-ffi基本不知道会返回多长的Buffer给它。

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

于 2016-11-03T14:59:55.310 回答