electron ffi调用C++ Struct指针取值问题
Jr-ThrowsTired
2021年05月28日 20:42

结构体中存在指针参数,通过结构体对象.参数名(指针参数名)获取参数时electron崩溃问题。ref-struct会把指针参数以Symbol类型写进ref.buffer中,所以取值就得换种思路来获取了(ES6-Symbol)。

https://es6.ruanyifeng.com/#docs/symbol

const ffi = require('ffi-napi&#​39;);

const ref = require('ref-napi&#​39;);

const ArrayType = require('ref-array-napi&#​39;);

ParaStruct = Struct({ id: ref.types.int16, value: ref.refType("void*&#​34;), });

ParaStructArray = ArrayType(ref.refType(ParaStruct));

const dll = new ffi.Library('resources/DLL&#​39;, {"STest&#​34;:['int&#​39;,[ParaStructArray]]});

var value= new Buffer(); for (var i = 0; i < 10; i++) { value.writeInt8(-1, i); }

let info = new ParaStruct ({ id:1, value:value, });

let array = [ParaStruct.ref()];

let num = dll.STest(array);

let buffer = array[0].deref();

for (let index in buffer) {

   if (index == 'ref.buffer&#​39;) {

     let StructType = ParaStruct[index];

     console.log(StructType);

     const objectSymbols=Object.getOwnPropertySymbols(StructType);

     console.log('test&#​39;, StructType[objectSymbols[0]]);

   }

}