Узел ffi отправляет матрицу в качестве параметра в C DLL - PullRequest
0 голосов
/ 08 ноября 2019

Я могу отправить массив в качестве параметра C DLL с этим кодом:

код JavaScript

var doublePtr = ref.refType(ref.types.double);



var Modelo1 = ffi.Library('./mylib', {
  "SetParams": [ "int", [  doublePtr ] ]
}
var buf = Buffer.alloc(ref.types.double.size * 3)
ref.types.double.set(buf, ref.types.double.size * 0, 1)
ref.types.double.set(buf, ref.types.double.size * 1, 2)
ref.types.double.set(buf, ref.types.double.size * 2, 3) 

SetParams(buf)

код C

int    SetParams( double * inputA)

Но яя пытаюсь отправить матрицу в функцию с этим форматом, и она не запускается:

int    SetParams( double ** input)

Знаете ли вы, как, если я могу сделать это с буфером? По-другому? Спасибо

1 Ответ

0 голосов
/ 08 ноября 2019

Наконец я смог сделать это не с Buffer, а с "ref-array"

var ArrayType = require('ref-array')

var DoubleArray = ArrayType(ref.types.double)
var DoubleMatrix = ArrayType(DoubleArray)

var mimatriz = new DoubleMatrix(2)
mimatriz[0] = new DoubleArray(3)
mimatriz[1] = new DoubleArray(3)
mimatriz[0][0] = 1.1;
mimatriz[0][1] = 1.2;
mimatriz[0][2] = 1.3;
mimatriz[1][0] = 2.1;
mimatriz[1][1] = 2.2;
mimatriz[1][2] = 2.3;

var Modelo1 = ffi.Library('./mylib', {
  "SetParams": [ "int", [  DoubleMatrix ] ]
}

SetParams( mimatriz );
...