Javascript 将node.js缓冲区转换为ref struct实例

Javascript 将node.js缓冲区转换为ref struct实例,javascript,c,ffi,Javascript,C,Ffi,我正在用C和Javascript(在node.js上)编写一个程序,使用,和其他几个ref-package 我有以下代码,我将其编译到libfun.so库中: 乐趣 fun.js var ffi = require('ffi'); var Struct = require('ref-struct'); var ref = require('ref'); var ArrayType = require('ref-array'); // js analog of the data struct f

我正在用C和Javascript(在node.js上)编写一个程序,使用,和其他几个ref-package

我有以下代码,我将其编译到libfun.so库中:

乐趣

fun.js

var ffi = require('ffi');
var Struct = require('ref-struct');
var ref = require('ref');
var ArrayType = require('ref-array');

// js analog of the data struct from fun.h
var Data = Struct({
  id: ref.types.int,
  message: ref.types.int,
});
// js analog of the type data *
var DataPointer = ref.refType(Data);

// pvoid is the js analog of void * in C
var pvoid = ref.refType(ref.types.void);
var PVoidArray = ArrayType(pvoid);

// set up our foreign functions from libfun
var libfun = ffi.Library('./libfun', {
    'fill_array' : ['void', [PVoidArray,ref.types.int]],
    'print_array' : ['void', [PVoidArray, ref.types.int]]
});
var myArray = new PVoidArray(10);
libfun.fill_array(myArray,10);
libfun.print_array(myArray,10); // this prints the array of structs correctly, from the C side
我的问题是:如何从Javascript端打印结构数组我想将myArray作为
PVoidArray
传入
我不想创建结构数组(即创建
var DataArray=ArrayType(DataPointer)
,并使用它代替
PVoidArray


让我们从myArray[0]开始。我们可以使用变量
Data
以(灵活的方式)获取
myArray[0]
并生成一个结构吗?与某些函数类似,bufferToArray(myArray[0],Data)==包含myArray[0]数据的数据实例。

查看文档,您可以使用:

ref.get(myArray.buffer, index, DataPointer).deref()

将从
myArray
index
返回
Data
的实例,我无法测试它,但请告诉我它是否有效:
ref.get(myArray,someIndex,DataPointer)。deref()
ref.get(ref.get(myArray,someIndex),0,Data)
ref.get(myArray.buffer,0,DataPointer)。deref()
有效。谢谢我很乐意接受这个答案。
var ffi = require('ffi');
var Struct = require('ref-struct');
var ref = require('ref');
var ArrayType = require('ref-array');

// js analog of the data struct from fun.h
var Data = Struct({
  id: ref.types.int,
  message: ref.types.int,
});
// js analog of the type data *
var DataPointer = ref.refType(Data);

// pvoid is the js analog of void * in C
var pvoid = ref.refType(ref.types.void);
var PVoidArray = ArrayType(pvoid);

// set up our foreign functions from libfun
var libfun = ffi.Library('./libfun', {
    'fill_array' : ['void', [PVoidArray,ref.types.int]],
    'print_array' : ['void', [PVoidArray, ref.types.int]]
});
var myArray = new PVoidArray(10);
libfun.fill_array(myArray,10);
libfun.print_array(myArray,10); // this prints the array of structs correctly, from the C side
ref.get(myArray.buffer, index, DataPointer).deref()