无法使用FFI将结构内的字符串数组传递给C函数

时间:2015-07-03 10:20:47

标签: c node.js ref node-ffi

我正在尝试使用FFI将字符串数组传递给我的C函数

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

var StringArray = ArrayType('string');
var myStructure=Struct({
'ulonglong' : ref.types.ulonglong,
'charptrptr' : StringArray,
'stringArr' : StringArray
});

var structObjNew=new myStructure();
structObjNew.ulonglong=123456;
structObjNew.charptrptr=["sample","ptrptr"]; 
structObjNew.stringArr=["sample1","ptrptr1"];

var libfactorial = ffi.Library('./stringArray', {
 'readArray': [ 'string', [ myStructurePtr]] //creating header definition 
});

var output=libfactorial.readArray(structObjNew.ref()); 
上面代码的

.C文件

struct myStructure
 {
    unsigned long long ulonglong;
    char  **charptrptr;
    char stringArr[3][10];
 };
EXPORT char* readArray(struct myStructure *nameofstr) {
  printf("Value from first param from structure of type char**\n");
  printf("%s\n",nameofstr->charptrptr[0]);
  printf("%s\n",nameofstr->charptrptr[1]);

  printf("value form second param from structure of thype char[][]\n");
  printf("%s\n",nameofstr->stringArr[0]);
  printf("%s\n",nameofstr->stringArr[1]);
}

我得到的输出如下:

  • 来自char**

    类型结构的第一个参数的值

    示例:ptrptr

  • 来自char[][]

    类型结构的第二个参数的值

    任何垃圾值,如▲é┌

即。当我将数组传递给char**类型时,我得到了正确的输出,但当我尝试将其传递给char*[]char[][]格式声明内部结构,我得到了垃圾值。

但是在C中直接将["aa","bb"]之类的字符串数组传递给char*[]参数可以正常工作。当我在结构中使用它时,它对我不起作用。

1 个答案:

答案 0 :(得分:0)

你的第二个数组有一个固定大小的字符。

尝试一下:

var CharArray10 = ArrayType('char', 10)
var StringArray3 = ArrayType(CharArray10, 3)

var myStructure = Struct({
  'ulonglong' : ref.types.ulonglong,
  'charptrptr' : StringArray,
  'stringArr' : StringArray3
});

更多示例here